Extração de arquivos .gz contidos em uma pasta

13

Eu tenho uma pasta contendo aproximadamente 320116 arquivos .pdb.gz. Eu quero descomprimir todos eles. Se eu usar gunzip * .gz, isso me causará um erro, ou seja, uma lista de argumentos longa demais. A pasta é de cerca de 2GB. Por favor, me dê uma sugestão apropriada.

    
por Lily Sharpton 19.03.2015 / 08:21

6 respostas

26
find . -name '*.pdb.gz' -exec gunzip {} +

-exec gunzip {} + fornecerá gunzip com muitos, mas não muitos, nomes de arquivos em sua linha de comando. Isso é mais eficiente que -exec gunzip {} \; , que inicia um novo processo gunzip para cada arquivo.

    
por 19.03.2015 / 08:26
7

Sempre que você obtiver erros "lista de argumentos muito longa", poderá contorná-los chamando o comando desejado várias vezes, sempre com um subconjunto dos argumentos que deseja usar. xargs é uma ferramenta que ajuda você a fazer isso automaticamente.

find . -type f -a -name \*.pdb.gz -print0 | xargs -0 gunzip
    
por 19.03.2015 / 08:25
1

Eu acho que isso deve funcionar, ele passa o caminho / nome de cada arquivo individualmente para gunzip para processamento:

find /my/dir -name "*.pdb.gz" -execdir gunzip "{}" \;
    
por 19.03.2015 / 08:26
1

Tente desta maneira:

find . -name '*.gz' -exec gunzip {} \;
    
por 19.03.2015 / 08:25
1

Se você tiver uma máquina com vários núcleos, provavelmente verá que usar gunzip não maximiza os recursos da sua máquina. Para isso, você precisaria executar vários gunzip s em paralelo. Manter o controle de qual terminal é feito manualmente é incômodo, mas você pode facilmente fazer isso com o GNU paralelo:

find . -name "*.gz" | parallel -X gunzip {}
    
por 19.03.2015 / 09:13
-1

Não é necessário usar find para isso, pois você não mencionou subpastas. O que você precisa fazer é:

for f in *.gz;do gunzip $f;done
    
por 19.03.2015 / 18:18

Tags