Ao usar * no bash como faço para saída para o mesmo arquivo

0

Estou tentando usar o comando convert -resize 1024X768 source.png dest.jpg em uma sequência de imagens. Eu preciso que ele seja aplicado a todas as imagens que eu posso fazer por convert -resize 1024X768 *.png , mas eu gostaria de saber como fornecer o mesmo nome de arquivo como o destino.

Estou usando apenas o comando convert como exemplo.

    
por user3927312 09.03.2018 / 23:16

1 resposta

6

Você pode tentar com uma linha de comando for

Teste com um 'dry run',

for i in *.png;do echo convert -resize 1024X768 "$i" "${i/.png}.jpg";done

e quando sua saída parece boa, remova echo e faça a conversão,

for i in *.png;do convert -resize 1024X768 "$i" "${i/.png}.jpg";done

Alternativa com find e rename

Se você quiser evitar um loop no bash, você pode usar find ,

find -maxdepth 1 -name "*.png" -exec echo convert -resize 1024X768 {} {}.jpg \;

e quando sua saída parece boa, remova o eco e faça a conversão,

find -maxdepth 1 -name "*.png" -exec convert -resize 1024X768 {} {}.jpg \;

Depois disso, você pode usar rename para tornar os nomes dos arquivos de destino mais agradáveis (podar a desajeitada extensão dupla)

rename -n s/.png.jpg$/.jpg/ *.png.jpg

e quando sua saída parece boa, remova -n e faça a renomeação real,

rename s/.png.jpg$/.jpg/ *.png.jpg

Provavelmente existem maneiras de fazer isso em uma etapa (sem renomear), mas não sei como. Talvez alguém cite e descreva uma maneira de fazer isso.

    
por sudodus 09.03.2018 / 23:39