Descompactando um lote de arquivos

25

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:".

    
por jeannoburto 21.08.2013 / 23:49

4 respostas

40

Você pode emitir o comando:

$ unzip '*.zip'

Procure aqui referência .

    
por 22.08.2013 / 00:01
24

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 {} \;
    
por 22.08.2013 / 00:06
4

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
    
por 22.08.2013 / 00:09
0

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
    
por 14.04.2016 / 23:29