Eu uso o seguinte script para converter todas jpg
as png
imagens:
# absolute path to image folder
FOLDER="/home/*/public_html/"
# max width
WIDTH=1280
# max height
HEIGHT=720
#resize png or jpg to either height or width, keeps proportions using imagemagick
find ${FOLDER} -type f \( -iname \*.jpg -o -iname \*.png \) -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;
mas fiquei chocado hoje quando corro
ls -l
e encontrei todas as fotos modificadas, dados alterados, grandes ou não
Oct 28 11:18 /home/photos/20210321/T161631305496ece25372fc18a9239da7911ac7c0dd056 (2).jpg
Então estou pensando em usar uma if
condição para verificar primeiro o caminho da imagem, depois se WIDTH for maior que 1280px execute convert
. Caso contrário, não faça nada.
atualização 2
Eu construí esse script
#!/bin/bash
for i in /root/d/*.jpg; do
read -r w h <<< $(identify -format "%w %h" "$i")
if [ $w -gt 1280 ]; then
FOLDER="$i"
WIDTH=1280
HEIGHT=720
find ${FOLDER} -type f \( -iname \*.jpg -o -iname \*.png \) -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;
fi
done
Então eu vejo find
melhor for
.
for
não pesquisou todas as pastas e subpastas.
atualização 3
WIDTH=1280
HEIGHT=720
find /home/sen/tes/ -type f \( -iname \*.jpg -o -iname \*.png \) | while read img; do \
anytopnm "$img" | pamfile | \
perl -ane 'exit 1 if $F[3]>1280' || convert "$img" -verbose -resize "${WIDTH}x${HEIGHT}>" "$img"; \
done
está funcionando bem, mas eu entendo
jpegtopnm: WRITING PPM FILE
quando não há imagens> 1280
Responder1
O principal problema do seu convert
comando é que o argumento $WIDTHx$HEIGHT\>
tenta expandir uma variável chamada $WIDTHx
. Como esta variável não existe, o argumento usado with -resize
será apenas o que $HEIGHT\>
for (que é o mesmo que using "${HEIGHT}x$HEIGHT>"
). Você corrige isso usando -resize "${WIDTH}x$HEIGHT>"
. Este é um problema em ambos os seus find
comandos.
Para reduzir suas imagens muito grandes, você poderia usar algo como
#!/bin/sh
w=1280
h=720
find /home/*/public_html -type f \( -iname '*.jpg' -o -name '*.png' \) \
-exec convert -resize "${w}x${h}>" {} \;
Pessoalmente, eu apenas restauraria as imagens do backup mais recente, pois aumentar e diminuir as imagens dessa forma reduzirá drasticamente sua qualidade.
Ao testar as coisas, execute conjuntos menores de cópias de suas imagens antes de liberar seus scripts em toda a sua coleção de imagens. Certifique-se também de que seus backups estejam funcionando conforme o esperado.
Responder2
sinto muito, não fui claro, encontrei e construí meu roteiro final e espero corrigir o título de Q com um inteligente
pesquisa de script por arquivos jpg
ou png
e se encontrado, verifique Largura se for maior que 1280 será convertido
#!/bin/bash
find /home/sen/tes/ -type f \( -iname \*.jpg -o -iname \*.png \) | while read i; do \
read -r w h <<<$(identify -format "%w %h" "$i")
if [ $w ]; then
if [ $w -gt 1280 ]; then
FOLDER="$i"
WIDTH=1280
HEIGHT=720
find ${FOLDER} -type f \( -iname \*.jpg -o -iname \*.png \) -exec convert \{} -verbose -resize ${WIDTH}x${HEIGHT}\> \{} \;
fi
fi
done