Как я могу добиться чего-то вроде следующего?
unzip ./zipped_docs.zip ./new_folder | mkdir ./new_folder
Или
mkdir ./new_folder | unzip ./zipped_docs.zip ./new_folder
Я даже пытался
mkdir ./new_folder && unzip ./zipped_docs.zip ./new_folder
Ничего из этого не сработало, но идея ясна.
Это возможно?
Правильный способ сделать это - использовать опцию -d
в команде unzip
mkdir new_folder && unzip zipped_docs.zip -d new_folder
Из man unzip
:
[-d exdir] An optional directory to which to extract files. By default, all files and subdirectories are recreated in the current direc‐ tory; the -d option allows extraction in an arbitrary directory (always assuming one has permission to write to the directory).
Я нашел флаг file-roller
-h
полезным, когда архив не содержит ни одного каталога верхнего уровня, а вместо этого представляет собой набор файлов и / или каталогов. Используя file-roller -h
, будет создан новый каталог, соответствующий имени вашего архива.
file-roller -h archive.zip
Например, archive.zip
будет извлечен во вновь созданный каталог archive
. С простым именем могут возникнуть коллизии, но идея в том, что извлекаемый вами архив будет относительно уникальным.
Вместо того, чтобы этот каталог создавался автоматически и на основе имени архива, вы можете указать каталог, используя флаг -e
.
file-roller -e /tmp/new_dir archive.zip
Если следующим шагом будет сделать это для группы файлов в каталоге, обратите внимание на некоторые распространенные ошибки, в частности, циклически просматривая файлы в каталоге (например: for f in dir/
)