Подтвердить что ты не робот

Создать папку для 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?

4b9b3361

Ответ 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 сделает это по умолчанию для всех видов архивов.