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?
+1 Este funcionou para mim. Eu tive que descompactar os nomes de arquivos com um formato específico enquanto restringia o restante. Eu apenas mantive o formato correspondente entre aspas duplas e funcionou como um encanto. A saída informa o número de arquivos processados com sucesso.
Lalit Kumar B
Funcionou lindamente no subsistema Ubuntu para Windows, 18/11/2018. A resposta principal não funcionou.
julianstanley
64
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/shfor zip in*.zip
do
dirname=`echo $zip | sed 's/\.zip$//'`if mkdir "$dirname"thenif cd "$dirname"then
unzip ../"$zip"
cd ..# rm -f $zip # Uncomment to delete the original zip fileelse
echo "Could not unpack $zip - cd failed"fielse
echo "Could not unpack $zip - mkdir failed"fidone
Essa é a coisa para conquistar todas as coisas. Não posso acreditar que ele não foi votado mais alto
billynoah 11/11/2015
Isso não lida com espaços nos nomes de arquivos.
David Oliver
1
Basta adicionar aspas "ao nome do arquivo.
CONvid19
1
o `salvou meu dia! obrigado! Estou fazendo algum loop, descompacte, execute uma ação, copie, grep alguma coisa, remova. A coisa que faltava era como ir de arq.gz de arquivo como uma variável no script bash
thahgr
38
descompacte * .zip ou, se estiverem em subpastas, algo como
descompactar faz o processamento de curingas, para que um arquivo chamado "* .zip" não faça o que você espera.
precisa saber é
3
Na verdade, isso vai fazer exatamente o que é esperado, o resultado da operação de busca está sendo passado para unzip
John Bargman
1
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?
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?
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.
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"fidone
Isso descompactará apenas um arquivo. A pergunta é para descompactar todas as pastas
Vivek Panday
Para ser justo, o título "Descompactar todos os arquivos em um diretório" pode ser ambíguo e também significa "Descompactar um único arquivo morto em um diretório separado".
Basta colocar algumas aspas para escapar do curinga:
fonte
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:
Será extraído para:
Script de shell:
fonte
"
ao nome do arquivo.descompacte * .zip ou, se estiverem em subpastas, algo como
fonte
gzip'ed
arquivos, usegunzip -rfk .
para descompactação recursiva dentro respectivas pastasDescompacte todos os
.zip
arquivos e armazene o conteúdo em uma nova pasta com o mesmo nome e na mesma pasta que o.zip
arquivo:Esta é uma extensão da resposta de @ phatmanace e aborda o comentário de @ RishabhAgrahari :
fonte
gzip'ed
arquivos, usegunzip -rfk .
para descompactação recursiva dentro respectivas pastasfind: illegal option -- n
usando UnZip 6,00 - qualquer outra pessoa?find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Você esqueceu a listagem do diretório.Isso descompactará todos os arquivos zip em novas pastas nomeadas com os nomes de arquivos dos arquivos zip.
a.zip
b.zip
c.zip
será descompactado ema
b
c
pastas, respectivamente.fonte
aunpack -e *.zip
, comatool
instalado. 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 ocorreunzip
em um zip sem estrutura de diretório.fonte
Em qualquer shell POSIX, isso será descompactado em um diretório diferente para cada arquivo zip:
fonte
for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
Usa isto:
fonte
for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done
fonte
for file in *.zip; do ...
certo?Se os arquivos estiverem
gzip'd
. Então basta usar:do diretório raiz para extrair recursivamente os arquivos nos respectivos diretórios, mantendo os originais (ou remova-os
-k
para excluí-los)fonte
Esta é uma variante da resposta de Pedro Lobito usando Como percorrer um diretório recursivamente para excluir arquivos com certos ensinamentos de extensões :
fonte
fonte
Para descompactar todos os arquivos em um diretório, digite este cmd no terminal:
fonte
Usar
descompactar uma pasta no linux
fonte