BASH: bz2 para gzip conversão com find

1

Gostaria de converter vários arquivos bzip2 em gzip format. Eu consegui isso com foor loop , mas eu gostaria de fazer o mesmo com find :

BASH para loop:

for i in $(ls -1 *.bz2); do echo "Converting: $i to ${i%.bz2}.gz"; { bunzip2 -c $i | gzip > ${i%.bz2}.gz; }; done

Eu tentei algo assim, mas não funciona:

find . -name "*.bz2" -type f -exec bunzip2 -c {} | gzip > ${1%.bz2}.gz \;
    
por HTF 26.06.2014 / 13:43

1 resposta

2

Não é tão simples. O Find só pode chamar um binário com um argumento "exec", mas agora você tenta chamar um pipe bunzip | gzip. Não é um simples binário, é uma cadeia de binários, e para iniciar uma coisa assim você precisa de algo, que possa manipular cachimbos.

A melhor coisa para isso foi uma concha. Você precisa chamar um shell para chamar esse pipe:

find . -name "*.bz2" -type f -exec bash -e 'bunzip2 -c {} | gzip > ${1%.bz2}.gz'

(Eu não testei, provavelmente algum problema de sintaxe pode ocorrer, veja isso como um template.)

    
por 26.06.2014 / 15:25