次のように名前を変更したい画像がたくさんあります。
*.png.png --> *.png
*.jpeg.jpg --> *.jpg
*.JPEG --> *.jpg
これまで試してきた唯一のことですが、うまくいかないことを知っていますが、mv *.png.png *.png
とにかく危険を冒しました。
このパターンを使用してファイル名をまとめて変更する簡単な方法はありますか?
答え1
あなたの質問に対する3つのケースのためのシェル専用ソリューションは次のとおりです。
for f in *.png.png ; do mv -i "${f}" "${f%.png}" ; done
for f in *.jpeg.jpg ; do mv -i "${f}" "${f%.jpeg.jpg}.jpg" ; done
for f in *.JPEG ; do mv -i "${f}" "${f%.JPEG}.jpg" ; done
ファイル名を変更するディレクトリに入力します。
代替の postfix スクリプト形式でこれらのソリューションを一般化するには、次のようにします。
#!/bin/sh
from=${1:?} to=${2:?}
for f in *${from} ; do mv -i "${f}" "${f%${from}}${to}" ; done
そして、置き換えるサフィックスと新しいサフィックスという2つのパラメータを使用してスクリプトを呼び出します。
答え2
find
名前の変更に使用される内容は次のとおりです*.png.png -> *.png
。
find ./ -name '*.png.png' -type f \
-exec sh -c 'mv {} ./$(basename -s .png.png {}).png' \;
実際には普遍的ではないので、他のファイル拡張子に合わせてカスタマイズする必要があります。
答え3
使用rename
。複数のファイルを処理するように特別に設計されています。
短いです。クリーナー。
*.png.png --> *.png
% rename 's/.png.png$/.png/' *.png
*.jpeg.jpg --> *.jpg
% rename 's/.jpeg.jpg$/.png/' *.jpeg.jpg
*.JPEG --> *.jpg
% rename 's/.JPEG$/.jpg/' *.JPEG
より包括的なマニュアル:
% man rename