Como posso redimensionar imagens em vários subdiretórios com mais eficiência?

0

Eu tenho as imagens originais em uma estrutura de diretórios que se parece com isso:

./Alabama/1.jpg
./Alabama/2.jpg
./Alabama/3.jpg
./Alaska/1.jpg
...the rest of the states...

Eu queria converter todas as imagens originais em miniaturas para que eu possa exibi-las em um site. Depois de um pouco de escavação / experimentação, eu criei o seguinte comando Linux:

find . -type f -iname '*.jpg' | sed -e 's/\.jpg$//' | xargs -I Y convert Y.jpg -thumbnail x100\> Y-small.jpg

Ele recursivamente localiza todas as imagens jpg em meus subdiretórios, remove o tipo de arquivo (.jpg) delas para que eu possa renomeá-las mais tarde, então as torna uma miniatura e as renomeia com '-small' anexado antes do tipo de arquivo .

Funcionou para os meus propósitos, mas é um pouco complicado e não é muito robusto. Por exemplo, não sei ao certo como inserir 'small-' no início do nome do arquivo (por isso ./Alabama/small-1.jpg).

Perguntas:

  1. Existe uma maneira melhor e mais robusta de criar miniaturas a partir de imagens localizadas em vários subdiretórios?
  2. Posso tornar o comando existente mais robusto (por exemplo, mas usando sed para renomear a miniatura gerada antes que ela seja salva - basicamente modifique a parte Y-small.jpg).
por jtfairbank 01.07.2012 / 20:46

1 resposta

0

Se é sempre apenas um nível de diretórios abaixo da sua posição, você pode tentar fazer um loop dessa maneira:

for dir in *; do
  [ ! -d "$dir" ] && continue; # skip non-directory entries, i.e. additional files
  cd "$dir"
  for file in *.jpg; do
    convert -thumbnail x100 "$file" "small-${file}" # creates e.g. small-1.jpg
  done
done
    
por 01.07.2012 / 22:19

Tags