Создать папку для zip файла и извлечь ее
Если я выберет zip файл и щелкните правой кнопкой мыши "извлечь здесь", будет создана папка с именем zip файла, и в нее будет извлечено все содержимое zip файла.
Однако, я хотел бы преобразовать несколько zip файлов через оболочку.
Но когда я делаю
unzip filename.zip
папка "filename"
не создается, но все файлы извлекаются в текущий каталог.
Я просмотрел параметры, но такого параметра нет.
Я также пробовал
for zipfile in \*.zip; do mkdir $zipfile; unzip $zipfile -d $zipfile/; done
но расширение .zip
файла 2. $zipfile и 4. $zipfile должно быть удалено с помощью sed.
Если я делаю
for zipfile in \*.zip; do mkdir sed 's/\.zip//i' $zipfile; unzip $zipfile -d sed 's/\.zip//i' $zipfile/; done
он не работает.
Как заменить расширение .zip
$zipfile
правильно?
Есть ли более простой способ, чем оболочка script?
Ответы
Ответ 1
unzip file.zip -d xxx
будет извлекать файлы в каталог xxx, а xxx будет создан, если его там нет. Подробнее о странице руководства вы можете узнать.
Ниже приведена строка awk:
ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'|sh
Смотрите тест ниже,
отметить, что я удалил |sh
в конце, так как мои zip файлы являются поддельными архивами; Я просто хочу показать созданную командную строку здесь.
kent$ ls -l
total 0
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 001.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 002.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 003.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 004.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 005.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 006.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 007.zip
kent$ ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'
unzip 001.zip -d 001
unzip 002.zip -d 002
unzip 003.zip -d 003
unzip 004.zip -d 004
unzip 005.zip -d 005
unzip 006.zip -d 006
unzip 007.zip -d 007
Ответ 2
"extract here" - это всего лишь функция любой используемой оболочки unzip
. unzip
будет извлекать только то, что на самом деле находится в архиве. Вероятно, нет более простого способа, чем оболочка script. Но sed
, awk
и т.д. Для этого не нужны, если у вас есть POSIX-совместимая оболочка:
for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done
(вы НЕ ДОЛЖНЫ избегать расширения *
или пути не будет.) Имейте в виду, что если ZIP-архив содержит каталог, например, с архивами Eclipse (которые всегда содержат eclipse/
), вы в конечном итоге с ./eclipse*/eclipse/eclipse.ini
в любом случае. Добавьте echo
до unzip
для сухого хода.
Ответ 3
Если у вас есть p7zip, версия командной строки 7zip установлена, вы можете использовать:
7z x '*.zip' -o'*'
Ответ 4
aunpack
from atool сделает это по умолчанию для всех видов архивов.