Como usar 'convert' e 'xargs' juntos?

3

Eu preciso converter vários arquivos .rgb em .png s (cada arquivo deve manter seu nome original).

Eu quero descobrir como converter o primeiro arquivo e depois colocar o comando em um loop 'for'.

Isso é o que eu tenho até agora:

find . -name "*.rgb" | sort | sed -n \p | xargs convert zzzzz.png

Mas isso não funciona.

Como posso fazer o comando convert reconhecer o segundo argumento zzzzz.png ?

    
por jjf 03.11.2016 / 19:55

2 respostas

5

Se você quiser converter todos os arquivos na árvore dir, eu executaria:

find . -name '*.rgb' | parallel convert {} {.}.png

Isso será executado paralelamente:

convert ./foo.rgb ./foo.png
convert ./bar/quux.rgb ./bar/quux.png

Aqui eu uso o GNU Parallel para fazer uso de todas as suas CPUs. Dependendo do seu sistema, você pode instalá-lo como um pacote, caso contrário, ele está aqui gnu.org/software/parallel . No Debian é:

apt-get install parallel

Editar:
Aqui está uma solução sem GNU Parallel :

find . -name '*.rgb' -exec sh -c 'convert "$0" "${0%.*}.png"' {} \;

e uma solução nada agradável usando while..read :

find . -name '*.rgb' | while read FILE; do convert "${FILE}" "${FILE%rgb}png" ; done
    
por 03.11.2016 / 22:06
-1

Eu encontrei a resposta:

for i in 'seq 1 $numOfRGBfiles'; do
#Insert code here that finds the file
#name of each rgb file and stores it 
#in $filename.

'find . -name "*.rgb" | sort | sed -n 
\$i\p |  xargs -I {} convert {} 
\$filename.png'
done
    
por 05.11.2016 / 07:44