複数のディレクトリに写真があります。jpegtran(コマンドラインツール)を使用して、それぞれを再帰的に調べ、最適化し、保存(上書き)したい
それらがすべて1つのフォルダーにある場合、私はこれを使用します
for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done
しかし、それを再帰的に動作させて、同じファイルを(新しいファイル名ではなく)上書きすることはできません
任意のヒント?
複数のディレクトリに写真があります。jpegtran(コマンドラインツール)を使用して、それぞれを再帰的に調べ、最適化し、保存(上書き)したい
それらがすべて1つのフォルダーにある場合、私はこれを使用します
for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done
しかし、それを再帰的に動作させて、同じファイルを(新しいファイル名ではなく)上書きすることはできません
任意のヒント?
find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \;
find
次のコマンドを使用してはどうですか。
find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \;
コマンドを実行します。出力が気に入ったら、削除echo
して実行します。
通常、そのような場合はfindを使用する方がはるかに簡単です。なぜなら、実行したいのはいくつかのファイル名に作用するからです。findユーティリティは、それらの名前を提供します。GNU (または場合によっては BSD) ツールを持っていると仮定すると、次の例はこの一般的なシナリオを示しています。
例えば:
$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \
-exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \;
ノート
cat file > file
同じファイルからの読み取りと書き込みを同時に行うことは、bashでは明確に定義されておらず、サポートされていないため、許可されていません。