1

次のようなディレクトリ構造に元の画像があります。

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

元の画像をすべてサムネイルに変換して、ウェブサイトに表示できるようにしたかったのです。少し掘り下げて実験した後、次の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-」を挿入する方法がわかりません(so ./Alabama/small-1.jpg)。

質問:

  1. 複数のサブディレクトリにある画像からサムネイルを作成するためのより優れた、より堅牢な方法はありますか?
  2. 既存のコマンドをより堅牢にすることはできますか(たとえば、sed保存する前に出力されたサムネイルの名前を変更するために使用します-基本的にY-small.jpg部分を変更します)。
4

1 に答える 1

3

このような複雑な構造を構築する必要はありません。最初に小さなブロックを作成してから接続します。

ファイル名の途中に挿入しないことにしました。-smallそれはすべてをより複雑にします。thumbsDir/aまたは。のいずれかであるプレフィックス(より単純なコード、およびサムから元のファイル名を導出することもより簡単)を使用することをお勧めしますthumbsPrefix-

#!/bin/sh

make_thumbnail() {
    pic=$1
    thumb=$(dirname "$1")/thumb-$(basename "$1")
    convert "$pic" -thumbnail x100 "$thumb"
}

# Now we need a way to call make_thumbnail on each file.
# The easiest robust way is to restrict on files at level 2, and glob those
# with */*.jpg
# (we could also glob levels 2 and 3 with two globs: */*.jpg */*/*.jpg)

for pic in */*.jpg
do
    make_thumbnail "$pic"
done
于 2012-07-02T19:41:53.710 に答える