この質問は以前に尋ねられた(そして答えられた) を知っているが、私の状況は独特であるようだ。
実行中、すべての写真の名前を*.JPG
から*.jpg
に変更する必要があります。
同じフォルダ内のすべての画像だけを再帰的に処理する必要はないとしましょう。
私が遭遇する問題はこれです:
mv: ‘P1010521.JPG’ and ‘p1010521.jpg’ are the same file
そのようなコマンドで、名前変更を使用する同じ問題:
rename 's/\.JPG$/.jpg/' *.JPG
P1020558.JPG not renamed: P1020558.jpg already exists
それは本当に簡単です:
大文字小文字が異なる同じ値以外の名前に変更する
rename 's/\.JPG$/\.jpgaux/' *.JPG
今度は別の名前を再び.jpg
に変更しますが、今回は小文字にします
rename 's/\.jpgaux$/\.jpg/' *.jpgaux
KasiyAが彼のコメントに正しければ、OPの問題は、同様の名前のファイルが既に存在するということです。その場合、スクリプトはターゲットファイル名(小文字)が既に存在するかどうかを確認する必要があります(存在する場合).
image1.JPG
に
renamed_image1.jpg
image1.jpg
はエラーを発生させるため
その場合、名前を変更するpythonソリューションは次のようになります。
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
for file in [f for f in os.listdir(directory) if f.endswith(".JPG")]:
newname = file[:file.rfind(".")]+".jpg"
if os.path.exists(directory+"/"+newname):
newname = "renamed_"+newname
shutil.move(directory+"/"+file, directory+"/"+newname)
スクリプトの名前は次のとおりです。
image1.JPG -> image1.jpg
ただし、image1.jpg
が既に存在する場合:
image1.JPG -> renamed_image1.jpg
スクリプトを空のファイルにコピーし、rename.py
として保存し、実行可能にし、コマンドで実行します。
<script> <directory_of_files>
Perlは正規表現でのコードの実行をサポートしているため、これが最適だと思います
rename -n 's/(\.[A-Z]+$)/lc($1)/ge' *.*[A-Z]*
-n
を削除して、実際にファイルの名前を変更します