web-dev-qa-db-ja.com

ファイル拡張子を小文字に変更する方法は?

この質問は以前に尋ねられた(そして答えられた) を知っているが、私の状況は独特であるようだ。

実行中、すべての写真の名前を*.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
5
littlevache

それは本当に簡単です:

  1. 大文字小文字が異なる同じ値以外の名前に変更する

    rename 's/\.JPG$/\.jpgaux/' *.JPG
    
  2. 今度は別の名前を再び.jpgに変更しますが、今回は小文字にします

    rename 's/\.jpgaux$/\.jpg/' *.jpgaux
    

デモ: http://paste.ubuntu.com/8853245/

ソース: コマンドラインから複数のファイルの拡張子を変更するには?Chakra

13
Lucio

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>
2
Jacob Vlijm

Perlは正規表現でのコードの実行をサポートしているため、これが最適だと思います

rename -n 's/(\.[A-Z]+$)/lc($1)/ge' *.*[A-Z]*

-nを削除して、実際にファイルの名前を変更します

1
HeLi8