У меня есть каталог файлов ZIP (созданный на машине Windows). Я могу вручную распаковать их, используя unzip filename
, но как я могу распаковать все файлы ZIP в текущей папке через оболочку?
Использование Ubuntu Linux Server.
У меня есть каталог файлов ZIP (созданный на машине Windows). Я могу вручную распаковать их, используя unzip filename
, но как я могу распаковать все файлы ZIP в текущей папке через оболочку?
Использование Ubuntu Linux Server.
Ответы:
Это работает в Bash, по этой ссылке :
распаковать \ *. zip
Просто вставьте несколько цитат, чтобы избежать подстановочного знака:
unzip "*.zip"
Следующий скрипт bash извлекает все zip-файлы в текущем каталоге в новые dir-файлы с именем файла zip-файла, то есть:
Следующие файлы:
myfile1.zip
myfile2.zip
Будет извлечено для:
./myfile1/files...
./myfile2/files...
Сценарий оболочки:
#!/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
"
к имени файла
распакуйте * .zip, или если они находятся в подпапках, то что-то вроде
find . -name "*.zip" -exec unzip {} \;
gzip'ed
файлов используйте gunzip -rfk .
для рекурсивного распаковывания внутри соответствующих папок
Разархивируйте все .zip
файлы и сохраните содержимое в новой папке с тем же именем и в той же папке, что и .zip
файл:
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Это расширение ответа @ phatmanace и адреса @ RishabhAgrahari :
При этом будут извлечены все zip-файлы в текущем каталоге, что если я хочу, чтобы zip-файлы (присутствующие в подпапках) были извлечены в соответствующие подпапки?
gzip'ed
файлов используйте gunzip -rfk .
для рекурсивного распаковывания внутри соответствующих папок
find: illegal option -- n
использования UnZip 6.00 - кто-нибудь еще?
find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Вы забыли список каталогов.
aunpack -e *.zip
, с atool
установленным. Преимущество в том, что он работает с ошибками и всегда распаковывает в подкаталоги, если zip не содержит только один файл. Таким образом, нет опасности загрязнения текущей директории массами файлов, как в случае с unzip
zip без структуры каталогов.
В любой оболочке POSIX это разархивирует в отдельный каталог для каждого zip-файла:
for file in *.zip
do
directory="${file%.zip}"
unzip "$file" -d "$directory"
done
for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
Использовать это:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done
for file in *.zip; do ...
правильно?
Это вариант ответа Педро Лобито, в котором используется рекурсивный цикл по каталогу для удаления файлов с определенными инструкциями расширений :
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
Чтобы разархивировать все файлы в каталоге, просто введите этот cmd в терминале:
unzip '*.zip'
использование
sudo apt-get install unzip
unzip file.zip -d path_to_destination_folder
разархивировать папку в linux