Script bash para descompactar vários arquivos de uma só vez

2

Eu tenho um conjunto de arquivos:

lium3@l128-37:/DATA/fr94/01 $ ls -l
total 7784
-rw-r--r-- 1 lium3 mcm1 395575 May  2  1996 fr940104.0z
-rw-r--r-- 1 lium3 mcm1 113815 May  2  1996 fr940104.1z
-rw-r--r-- 1 lium3 mcm1 186333 May  2  1996 fr940104.2z
-rw-r--r-- 1 lium3 mcm1 164854 May  2  1996 fr940105.0z
-rw-r--r-- 1 lium3 mcm1  39677 May  2  1996 fr940105.1z
-rw-r--r-- 1 lium3 mcm1 284948 May  2  1996 fr940105.2z

Eu quero descomprimi-los todos de uma vez (isso é apenas uma amostra!).

Eu tentei isso

find -name '*.0z' -exec sh -c 'uncompress  "${1%.*}" "$1"' _ {} \;

e acabamos de receber:

gzip: ./fr940125.gz: No such file or directory
gzip: ./fr940125.0z: unknown suffix -- ignored
gzip: ./fr940106.gz: No such file or directory
gzip: ./fr940106.0z: unknown suffix -- ignored

Eu tenho muitos diretórios com arquivos como esses.

Se eu conseguir um script para fazer um diretório, é possível fazer recursivamente através dos diretórios?

    
por Meijuan 07.06.2018 / 18:05

1 resposta

0

Parece que você tem dois problemas:

1: Seu ${1%.*} resulta no nome de base dos arquivos (por exemplo, fr940125 ), o uncompress, portanto, tenta adicionar o sufixo padrão .gz, para o nome do novo arquivo combinado que ele tenta, nenhum arquivo existe. / p>

2: você dá um segundo parâmetro para descomprimir, que é o nome correto do arquivo, mas o descompactar não sabe o que fazer com o final do arquivo. Tente dar os parâmetros ' -S .0z ' como argumento.

O comando a seguir talvez seja o correto, para recursivamente extrair todos os arquivos .0z no subdiretório atual e em todos os subdiretórios:

find -name '*.0z' -exec sh -c 'uncompress  -S .0z "$1"' _ {} \;
    
por 11.12.2018 / 00:16