Eu tenho um diretório chamado src
cheio de subdiretórios e outras imagens. Tentei usar uma instrução bash para redimensioná-los automaticamente para outro diretório de destino chamado thumb
assim:
find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;
Isso não funcionou porque o thumb
diretório está inicialmente vazio e não tem a mesma estrutura de diretórios que o src
.
Tentei procurar, man convert
mas não consigo encontrar a opção de ativar automaticamente os diretórios convert
. Qual é uma maneira eficaz de converter todas as minhas imagens em tamanho de miniatura no thumb
diretório? Preciso pré-criar todos os subdiretórios em miniatura?
EDITAR
Eu precedi o comando acima com isto:
find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;
Mas estou curioso para saber se conseguiria fazer tudo com um comando em vez de dois?
Responder1
A filosofia do UNIX é ter comandos que fazem uma coisa e apenas uma coisa. Comandos que podem gravar em um arquivo em vez desaída padrãojá estão ampliando esta regra.
Se você pode fazer tudo em um comando depende da sua definição. Faz isso:
find ./src -type f -follow -iname '*.jp*g' -exec /bin/sh -c \
'mkdir -p `dirname "thumb/'${size}'/{}"` &&'\
'convert -resize 150x150x "{}" "./thumb/'${size}'/{}' \;
conte como um comando ou vários: find
, sh
, mkdir
, dirname
, convert
? As quebras de linha são apenas para"legibilidade".