Como executar comandos em lote no terminal para arquivos em cada pasta

0

Eu tenho uma pasta que contém algumas pastas dentro. Em cada pasta, existem alguns arquivos bmp . Eu quero ir dentro de cada diretório, converter bmp images para pgm format e remover os arquivos bmp originais, e repita para o próximo diretório.

por exemplo. pastas são

.
..
folder-a
folder-b

E o comando que quero usar:

~/folder-a$ mogrify -format pgm *.bmp && rm *bmp

É possível fazer isso com um único comando, por exemplo, canalizando ls result em mogrify comandos? e não se incomodar com um script de shell?

    
por Sean87 19.01.2016 / 20:56

2 respostas

4

find . -name "*.bmp" -exec mogrify -format pmg {} \; -exec rm {} \;

Deve fazê-lo a partir da pasta de nível superior. Isso executará o segundo comando somente quando o primeiro for bem-sucedido.

Se você quiser executar os dois comandos, mesmo que o primeiro não tenha sido bem-sucedido, você precisa:

find . -name "*.bmp" \( -exec mogrify -format pmg {} \; -o -exec true \; \) -exec rm {} \;

    
por 19.01.2016 / 21:03
2

Isso deve funcionar.

for f in 'ls'; do
  cd $f
  mogrify -format pmg *.bmp && rm *bmp
  cd ..
done

Ou em uma linha:

for f in 'ls'; do cd $f; mogrify -format pmg *.bmp && rm *bmp; cd ..; done
    
por 19.01.2016 / 21:01