2010-03-03 3 views
110

У меня есть каталог ZIP-файлов (созданных на компьютере под управлением Windows). Я могу вручную распаковать их, используя unzip filename, но как я могу разархивировать все ZIP-файлы в текущей папке через оболочку?Распаковать все файлы в каталоге

Использование Ubuntu Linux Server.

ответ

218

(непроверенные), но this link предлагает:.

разархивируйте \ * почтовый

+2

Протестировано, отлично работает. – jeffbyrnes

+1

работает как минимум в bash. –

+2

\ используется для выхода *, правильно? – sdaffa23fdsf

-2
for i in `ls *.zip`; do unzip $i; done 
+4

Бесполезные использование '\' Ls \ ''. 'для i в * .zip; делать ...; сделано' – ephemient

+12

* Dangerous * использование ls. Что делать, если у вас есть файл под названием «-j -o -d .. jackass.zip» – geocar

26

распаковать * .zip, или если они находятся в подпапках, а затем что-то вроде

find . -name "*.zip" -exec unzip {} \; 
+0

unzip обрабатывает подстановочные знаки, поэтому файл с именем «* .zip» не будет делать то, что вы ожидаете. – geocar

+2

Фактически это будет делать именно то, что ожидается, результат операции поиска передается на unzip –

+0

. Это будет извлекать все zip-файлы в текущем каталоге, что, если я хочу, чтобы zip-файлы (присутствующие в подпапках) были извлечены в соответствующие подпапки? –

53

Просто введите некоторые цитаты, чтобы избежать шаблона:

unzip "*.zip" 
+1

+1 Это работало для меня. Мне пришлось разархивировать имена файлов в определенном формате, ограничивая остальные. Я просто сохранил соответствующий формат в двойных кавычках, и он работал как шарм. Вывод сообщает мне, сколько архивов успешно обработано. –

6

aunpack -e *.zip, с atool установлен. Имеет то преимущество, что он интеллектуально обрабатывает ошибки и всегда распаковывается в подкаталоги, если zip не содержит только один файл. Таким образом, нет никакой опасности заразить текущий каталог массами файлов, так как есть unzip на zip без структуры каталогов.

2

Используйте это:

for file in `ls *.Zip`; do 
unzip ${file} -d ${unzip_dir_loc} 
done 
34

извлекает все почтовые файлы в текущей директории в новые директории с именем файлом архива.

еи следующие файлы:

myfile1.zip 
myfile2.zip 

будут извлечены:

./myfile1/files... 
./myfile2/files... 

Shell скрипт:

#!/bin/sh 
for zip in *.zip 
do 
    dirname=`echo $zip | sed 's/\.zip$//'` 
    if mkdir "$dirname" 
    then 
    if cd "$dirname" 
    then 
     unzip ../"$zip" 
     cd .. 
     # rm -f $zip # Uncomment to delete the original zip file 
    else 
     echo "Could not unpack $zip - cd failed" 
    fi 
    else 
    echo "Could not unpack $zip - mkdir failed" 
    fi 
done 
+2

Это то, что нужно победить. Не могу поверить, что это не проголосовало выше – billynoah

+0

Это не касается пробелов в именах файлов. –

+1

Просто добавьте цитаты '' 'в filename –

-3

Использование

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder 

разархивировать папку в Linux

+1

Wow nice commands –

+0

Это будет только для разблокировки одного файла. Вопрос заключается в распаковке всех папок. –

+0

Чтобы быть справедливым, заголовок «Распаковать все файлы в каталоге» * может * быть неоднозначным, а также означать, что «Разархивировать один архив в отдельный каталог». – jdersen

8
for i in *.zip; do 
    newdir="${i:0:-4}" && mkdir "$newdir" 
    unzip "$i" -d "$newdir" 
done 

Это будет распаковать все архивы почтового индекса в новые папки, названые с именами файлов почтового индекса архивов.

a.zipb.zipc.zip будут распакованы в abc папки соответственно.

1

for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done

0

Это вариант Pedro Lobitoanswer используя How to loop through a directory recursively to delete files with certain extensions учения:

shopt -s globstar 
root_directory="." 

for zip_file_name in **/*.{zip,sublime\-package}; do 
    directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'` 
    printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n" 

    if [ -f "$root_directory/$zip_file_name" ]; then 
     mkdir -p "$root_directory/$directory_name" 
     unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name" 

     # Some files have the executable flag and were not being deleted because of it. 
     # chmod -x "$root_directory/$zip_file_name" 
     # rm -f "$root_directory/$zip_file_name" 
    fi 
done 
-1

распаковать все файлы в каталоге просто введите этот ЦМД в терминале:

unzip '*.zip' 
+0

этот ответ является дубликатом https://stackoverflow.com/a/2376135/6948900 –

Смежные вопросы