Descompactando vários arquivos de uma só vez

24

Eu tenho mais de 200% de arquivos.zip em uma pasta. Eu não quero descomprimi-los um por um. Eu quero extrair aqueles usando um único comando ou script. Como fazer isso.

    
por g_p 08.03.2014 / 21:02

7 respostas

34

Se você realmente quiser descompactá-los em paralelo, você pode fazer

for i in *zip; do unzip "$i" & done

Isso, no entanto, iniciará N processos para arquivos Nzip e poderá ser muito pesado em seu sistema. Para uma abordagem mais controlada, lançando apenas 10 processos paralelos por vez, tente isto:

find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}

Para controlar o número de processos paralelos iniciados, altere -P para o que você quiser. Se você não quiser recorrer a subdiretórios, faça isso:

find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}

Alternativamente, você pode instalar o paralelo GNU sugerido por @OleTange nos comentários e executar

parallel unzip ::: *zip
    
por terdon 08.03.2014 / 21:36
16

O comando GNU paralelo é bem adequado para esse tipo de coisa. Depois:

$ sudo apt-get install parallel

Então

ls *.zip | parallel unzip

Isso usará quantos núcleos você tiver, mantendo cada núcleo ocupado com um descompactador, até que todos estejam prontos.

    
por Wayne Conrad 09.03.2014 / 12:09
12

Você pode usar o seguinte comando:

Primeiro, altere o diretório no terminal para o diretório que contém os arquivos .zip:

cd /path

Em seguida, execute este comando para descompactar todos os arquivos .zip:

for z in *.zip; do unzip "$z"; done
    
por nux 08.03.2014 / 21:09
10

Se você tiver muitos arquivos .zip em sua pasta e quiser descompactar todos eles, abra o terminal e vá para a sua pasta usando:

cd <path_to_folder>

Agora use este comando para descomprimir todo o seu arquivo .zip :

ls *.zip | xargs -n1 unzip
    
por g_p 08.03.2014 / 21:06
6

Você pode usar o find com -exec , assim,

find . -name "*.zip" -exec unzip {} \;

Esse irá funcionar se o arquivo tiver um espaço no nome.

    
por Elliott Frisch 10.03.2014 / 03:59
3

Um método não terminal.

Basta selecionar os arquivos zip, clicar com o botão direito do mouse em um e escolher extract here . Você pode selecionar todos ou apenas alguns arquivos zip por vez.

    
por Parto 09.03.2014 / 13:07
1

unzip \*.zip ou unzip '*.zip'

O óbvio unzip *.zip não funciona, porque o shell o expande para unzip foo.zip bar.zip ... e unzip interpreta o primeiro nome de arquivo como o arquivo zip e os seguintes nomes de arquivo como arquivos para extrair desse arquivo zip.

No entanto, unzip é um pouco incomum entre os comandos Unix, pois faz suas próprias expansões glob. Se o * não for expandido pelo shell, o unzip fará isso e interpretará todos os nomes de arquivos resultantes como arquivos zip para serem processados. Portanto, neste caso especial, pode-se escapar sem um for loop ou xargs ou algo semelhante.

    
por Nate Eldredge 10.03.2014 / 04:36

Tags