
元の画像は次のようなディレクトリ構造になっています。
./Alabama/1.jpg
./Alabama/2.jpg
./Alabama/3.jpg
./Alaska/1.jpg
...the rest of the states...
元の画像をすべてサムネイルに変換して、Web サイトに表示できるようにしたいと考えました。少し調べたり実験したりした後、次の Linux コマンドを思いつきました。
find . -type f -iname '*.jpg' | sed -e 's/\.jpg$//' | xargs -I Y convert Y.jpg -thumbnail x100\> Y-small.jpg
サブディレクトリ内のすべての jpg 画像を再帰的に検索し、後で名前を変更できるようにファイル タイプ (.jpg) を削除してから、サムネイルにして、ファイル タイプの前に「-small」を追加して名前を変更します。
私の目的にはうまくいきましたが、少し複雑で、あまり堅牢ではありません。たとえば、ファイル名の先頭に「small-」を挿入する方法がわかりません (つまり、./Alabama/small-1.jpg)。
質問:
- 複数のサブディレクトリにある画像からサムネイルを作成するための、より優れた、より堅牢な方法はありますか?
- 既存のコマンドをより堅牢にすることはできますか (たとえば、sed を使用して、出力されたサムネイルを保存する前に名前を変更します。基本的には、Y-small.jpg の部分を変更します)。
答え1
常に自分の位置より 1 レベル下のディレクトリである場合は、次のようにループしてみてください。
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