ZSH: Caminho de remoção, nome de arquivo e extensão de uma lista de arquivos para canalizar um comando

4

A sintaxe do comando convert em ImageMagick é

convert source_filename.ext1  destination_filename.ext2

Eu gostaria de usar o zsh para alimentá-lo com arquivos em uma pasta path_to_source e gerar o resultado (arquivos com o mesmo nome, mas com uma extensão diferente ) na pasta path_to_destination .

Acredito que posso usar find e xargs para isso, mas não encontrei nada que funcionasse. Também presumo que o ZSH possa ter alguns recursos úteis para isso. Quaisquer ponteiros seriam muito apreciados.

OBSERVAÇÃO: Até onde eu sei, convert não tem uma maneira nativa de manipular um lote de arquivos, então eu preciso alimentar os arquivos um por um. Em ambos os casos, estou interessado em resolver o problema de alimentar um arquivo de comando por arquivo com esses argumentos.

    
por Amelio Vazquez-Reina 30.08.2011 / 20:12

3 respostas

6
for x in /path/to/source/**/*.ext1; do convert $x ${x:r}.ext2 done

O r em ${x:r} é um modificador de histórico . Há uma forma abreviada de for que salva alguns caracteres.

for x (/path/to/source/**/*.ext1) convert $x ${x:r}.ext2
    
por 31.08.2011 / 01:29
2

Eu faria isso com:

cd path_to_source
find . | sed 's/.ext1$//' | xargs convert {}.ext1 ../path_to_destination/{}.ext2
    
por 30.08.2011 / 20:35
1

Você pode processar arquivos em lote com mogrify e converter de um formato para outro usando a opção -path (a partir de imagemagick v6.2.0 ) para especificar um diretório diferente para a saída das imagens processadas:

mogrify -path /path/to/dest_filename -format ext2 /path/to/source_filename/*.ext1

, por exemplo,

mogrify -path /home/myjpgs -format jpg /media/images/*.png

converterá todas as .png imagens no diretório /media/images para jpg mantendo o mesmo nome de arquivo (somente a extensão muda) e salvando as imagens resultantes em /home/myjpgs

    
por 06.08.2015 / 15:11