Eu tenho um diretório de arquivos ZIP (criados em uma máquina Windows). Posso descompactá-los manualmente usando unzip filename, mas como posso descompactar todos os arquivos ZIP na pasta atual através do shell?
Usando o Ubuntu Linux Server.
Eu tenho um diretório de arquivos ZIP (criados em uma máquina Windows). Posso descompactá-los manualmente usando unzip filename, mas como posso descompactar todos os arquivos ZIP na pasta atual através do shell?
Usando o Ubuntu Linux Server.
Respostas:
Isso funciona no bash, de acordo com este link :
descompacte \ *. zip
Basta colocar algumas aspas para escapar do curinga:
unzip "*.zip"
O script bash a seguir extrai todos os arquivos zip no diretório atual em novos diretórios com o nome do arquivo zip, ou seja:
Os seguintes arquivos:
myfile1.zip
myfile2.zip
Será extraído para:
./myfile1/files...
./myfile2/files...
Script de 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
"ao nome do arquivo.
descompacte * .zip ou, se estiverem em subpastas, algo como
find . -name "*.zip" -exec unzip {} \;
gzip'edarquivos, use gunzip -rfk .para descompactação recursiva dentro respectivas pastas
Descompacte todos os .ziparquivos e armazene o conteúdo em uma nova pasta com o mesmo nome e na mesma pasta que o .ziparquivo:
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Esta é uma extensão da resposta de @ phatmanace e aborda o comentário de @ RishabhAgrahari :
Isso extrairá todos os arquivos zip no diretório atual. E se eu quiser que os arquivos zip (presentes nas subpastas) sejam extraídos nas respectivas subpastas?
gzip'edarquivos, use gunzip -rfk .para descompactação recursiva dentro respectivas pastas
find: illegal option -- nusando UnZip 6,00 - qualquer outra pessoa?
find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;Você esqueceu a listagem do diretório.
aunpack -e *.zip, com atoolinstalado. Tem a vantagem de lidar de maneira inteligente com erros e sempre descompactar subdiretórios, a menos que o zip contenha apenas um arquivo. Portanto, não há perigo de poluir o diretório atual com massas de arquivos, como ocorre unzipem um zip sem estrutura de diretório.
Em qualquer shell POSIX, isso será descompactado em um diretório diferente para cada arquivo 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
Usa isto:
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 ...certo?
Esta é uma variante da resposta de Pedro Lobito usando Como percorrer um diretório recursivamente para excluir arquivos com certos ensinamentos de extensões :
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
Para descompactar todos os arquivos em um diretório, digite este cmd no terminal:
unzip '*.zip'
Usar
sudo apt-get install unzip
unzip file.zip -d path_to_destination_folder
descompactar uma pasta no linux