2

間違ったファイル名拡張子を持つすべての画像の名前変更を自動化する方法を探しています。これまでのところ、少なくともこれらすべてのファイルのリストを取得する方法を見つけました。

find /media/folder/ -name *.jpg -exec file {} \; | grep  'PNG\|GIF' > foobar.txt
find /media/folder/ -name *.png -exec file {} \; | grep 'JPEG\|GIF' >> foobar.txt
find /media/folder/ -name *.gif -exec file {} \; | grep 'JPEG\|PNG' >> foobar.txt

ただし、名前の変更も自動化したいと思います。私は次のようなことを試みました

find /media/folder/ -name *.jpg -exec file {} \; | grep -l PNG | rename s/.jpg/.png/

しかし、この場合grep -l、またはgrep -lH私が思ったようにファイル名だけをリストしないでください。

4

1 に答える 1

1

-lとの-Hフラグは、このgrep例では役に立ちません。これらのフラグは、パイプからの例のように、標準入力で使用しても効果がありません。-rこれらのフラグは、ファイル (またはディレクトリと再帰のフラグ) を指定した場合にのみ機能します。次に例を示します。

grep -rl PNG path/to/dir1 file2 file3

あなたの例で-lは効果がないため、出力は一致した完全な行ですPNG。あなたの例では、おそらく次のようになります。

icon.png: PNG 画像、512 x 512、8 ビット/カラー RGBA、ノンインターレース

ファイル名だけを取得するには、次のようにコロンの後のすべてを切り取ることができます。

find /media/folder/ -name *.jpg -exec file {} \; | grep PNG | sed -e s/:.*// | rename s/.jpg/.png/
于 2013-03-02T23:48:17.103 に答える