Você pode emitir o comando:
$ unzip '*.zip'
Procure aqui referência .
Quando eu tento
unzip filename.zip
funciona. No entanto, preciso descompactar uma série de arquivos zip.
Por que:
find . -name "*.zip" -print0 | xargs -0 unzip
ou
ls *.zip | xargs unzip
não está funcionando?
Em ambos os casos, recebo uma mensagem "caution: filename não correspondido:".
Seus comandos não estão funcionando porque eles colocam todos os arquivos na mesma linha de comando. Enquanto isso funciona com a maioria dos programas, unzip
terá o primeiro argumento como o arquivo zip, e qualquer um após o primeiro como arquivos para extrair dele. Você precisa executar o comando uma vez para cada arquivo:
find . -name "*.zip" -print0 | xargs -0 -n1 unzip
Ou
find . -name '*.zip' -exec unzip {} \;
No bash você também pode fazer o seguinte:
for i in *.zip; do
unzip "$i"
done
Além disso, unzip
pode usar a opção -d
para poder direcionar a saída para locais diferentes.
Por exemplo:
uzdir=/path/to/unzips
for i in *.zip; do
[ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
unzip "$i" -d "$uzdir/$i"
done
Existe uma solução muito mais fácil do que os loopings acima, use o diretório -d
flag:
unzip -o somefiles.zip -d $directoryPath
Tags command-line zip