Поскольку вы знаете, что zip-файл содержит нежелательную папку верхнего уровня, и, поскольку вы знаете имя этой папки верхнего уровня, вы можете использовать символическую ссылку, чтобы все содержимое этой папки отображалось в родительском элементе следующим образом:
ln -s . 'data/All CRGs'
unzip 'All CRGs.zip' -d data
Шаг ln
вызывает создание папки data/All CRGs
на текущий каталог (относительно data/
), который является data/
. Затем, когда вы извлекаете файлы из All CRGs.zip
и команда unzip
пытается создать data/All CRGs/file.dat
, этот файл будет создан как data/./file.dat
.
Эту технику можно продемонстрировать без zip-файла, используя touch:
$ mkdir data
$ ln -s . data/subdir
$ touch data/subdir/foo.txt
$ ls data
foo.txt subdir
Вы также можете использовать этот трюк для извлечения определенных файлов или папок в альтернативную папку:
ln -s /tmp data/subdir2
Тогда все, что находится в архиве, извлекаемом в subdir2
, появится в /tmp
.