如何将文件扩展名重命名为小写?

如何将文件扩展名重命名为小写?

我知道这个问题之前已经有人问过(并回答过),但看来我的情况比较特殊,因为我无法找到任何可行的解决方案。

运行时,我需要将所有照片从 重命名*.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

答案1

这真的很简单:

  1. 重命名为除大小写不同的相同值以外的其他名称

    rename 's/\.JPG$/\.jpgaux/' *.JPG
    
  2. 现在将其重命名为其他名称.jpg,但这次要使用小写字母

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

演示:http://paste.ubuntu.com/8853245/

来源:如何从命令行更改多个文件的扩展名?谢谢脉轮

答案2

使用 mmv 真的很容易:

sudo apt install mmv

mmv \*.JPEG \#1.jpeg

答案3

如果 αғsнιη 的评论是正确的,我认为他是对的,那么 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>

答案4

我认为这是最好的,因为 perl 支持在正则表达式中运行代码

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

删除-n以实际重命名文件

相关内容