gunzip uma pasta com muitos arquivos

3

Eu tenho uma pasta com 36.348 arquivos de arquivos gz. Eu quero descompactar todos eles.

Em exibição:

gunzip ./*

resulta em

-bash: /usr/bin/gunzip: Argument list too long

Qual é a maneira mais fácil de contornar isso?

    
por user1357015 23.08.2014 / 21:24

5 respostas

7

Tente:

find . -type f -exec gunzip {} +

Isso pressupõe que o diretório atual contém apenas arquivos que você deseja descompactar.

    
por 23.08.2014 / 21:31
7

O limite está no kernel e está no tamanho cumulativo dos argumentos e do ambiente transmitidos à chamada de sistema execve() usada para executar um comando. Você pode dividi-lo em várias invocações.

Para gunzip todos os arquivos .gz no diretório atual:

com zsh :

autoload zargs # best in ~/.zshrc
zargs ./*.gz -- gunzip

com ksh93 :

command -x gunzip ./*.gz

GNUly:

printf '%s
find . ! -name . -prune -name '*.gz' -exec gunzip {} +
' *.gz | xargs -r0 gunzip

POSIXly (e com gunzip ):

ulimit -s unlimited
gunzip ./*.gz

(lembre-se de que também será descompactado os arquivos .gz ocultos)

Ou você pode aumentar esse limite em alguns sistemas. Em versões recentes do Linux:

autoload zargs # best in ~/.zshrc
zargs ./*.gz -- gunzip
    
por 23.08.2014 / 21:50
3

A maneira mais simples que encontrei é:

gunzip -r .
    
por 30.01.2016 / 12:32
1

Uma solução pouco eficiente seria

find $PWD -type f -name "*.gz" -print0 | xargs -0 gunzip

Mas se o seu find não tiver a opção -print0 e seus arquivos / dir não tiverem espaço na nomenclatura, você poderá pular os argumentos -print0 e -0.

    
por 23.08.2014 / 21:40
1

Um processo menos eficiente (mas de longo prazo, muito flexível) é criar um arquivo em lotes:

ls | grep .gz | sed -e 's/^/gunzip /' | less

mostra o que vai acontecer, então um simples erro de digitação não aniquila seu sistema

ls | grep .gz | sed -e 's/^/gunzip /' | bash

faz isso agora

ls | grep .gz | sed -e 's/^/gunzip /' > unpack
at 02:00
bash unpack
<ctrl-d>

faz isso durante a noite

(note que este exemplo não considera espaços em nomes de arquivos.)

    
por 24.08.2014 / 05:58

Tags