Acho que mogrify
reescreve sistematicamente o arquivo, portanto, sua única esperança é filtrar a lista primeiro, como sugerido pelo jippie . Veja como você pode fazer isso (não testado): imprima uma lista de arquivos de imagem com uma indicação de tamanho, mantenha apenas os nomes cujo tamanho associado esteja dentro do intervalo e processe essa lista.
identify -format '%w %h %i\n' ./*.png |
awk '$1 > 400 || $2 > 400 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' 'identify -format '%w %h %i\n' ./*.png |
awk '$1 > 400 || $2 > 400 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' '%pre%' |
xargs -0 mogrify -resize '400x400'
' |
xargs -0 mogrify -resize '400x400'
Explicação de script:
- Para cada arquivo, imprima uma linha com a largura, um espaço, a altura, um espaço e o nome do arquivo. Dependendo da sua versão de
identify
, o\n
para adicionar uma nova linha final pode ser necessário (ImageMagick 6.6.0) ou supérfluo, mas inofensivo (GraphicsMagick 1.1.11). - (
awk
) Em cada linha, se a largura ($1
) e a altura ($2
) corresponderem às condições necessárias, então:- Remove todo o texto até o segundo caractere de espaço. Isso retira a largura e a altura.
- Imprima o que resta da linha, que é o nome do arquivo.
- Substituir novas linhas por caracteres nulos.
- Chame
xargs -0
para executar o comandomogrify
nos nomes dos arquivos. (Não podemos usarxargs
simples porque não é possível lidar com entrada contendo espaço em branco ou\'"
.)
Os nomes dos arquivos podem conter qualquer caractere, exceto novas linhas.