如何用一个命令更改所有文件前缀?

如何用一个命令更改所有文件前缀?

我需要将所有文件的后缀(均为 .JPEG)更改为 .jpeg(大写与小写)。
有没有快速的方法?

答案1

rename使用默认安装的Perl 程序:

rename 's/\.JPEG$/.jpeg/' *.JPEG

第一个参数是 Perl 正则表达式,匹配以 结尾的文件名.JPEG并将其替换为.jpeg

第二个参数选择应匹配的文件,在您的情况下是当前目录中以 结尾的每个文件.JPEG。当然,您可以指定其他位置:

rename 's/\.JPEG$/.jpeg/' ~/Pictures/*.JPEG

我见过的其他答案:

  • rename s/.JPEG$/.jpeg/ *- 这也会重命名文件,StupidJPEG因为Stupi.jpeg点匹配任何字符。.JPEG$是一个正则表达式
  • rename 's/\.JPEG$/\.jpeg/' *- 可以工作,但效率较低,因为它将当前目录中的所有文件传递给rename
  • rename -n 's/.JPEG$/.jpeg/' *.JPEG- 该-n选项将显示正在重命名的文件,但实际上不会重命名它们(“试运行”)。由于仅*.JPEG匹配以 为后缀的文件.JPEG,因此这里不存在点匹配所有问题。

答案2

虽然这可能不是此特定用例的最佳解决方案,

for i in *.JPEG; do mv "$i" "$(basename "$i" .JPEG).jpeg"; done

也可以。我们可以对 bash 做一些小技巧,以稍微提高效率(避免在内部循环中调用额外的子进程),最终得到:

for i in *.JPEG; do mv "$i" "${i%%.JPEG}.jpeg"; done

如果你想做其他事情,这个解决方案最有用此外重命名文件,例如记录更改的名称,或者甚至只是进行试运行以确保它按照您的要求执行。

答案3

有一个工具可以实现这个目的:

sudo apt-get install renameutils或点击重命名工具

(如果尚未安装)

您可以在其中执行操作(从命令行):

rename s/\.JPEG$/\.jpeg/ *.JPEG

答案4

使用重命名命令。它与移动命令不同,并且经常引起混淆,因为它是专门为图片重命名而创建的。

类似这样的命令应该可以工作(对于所有以 .JPEG 结尾的文件,将 .JPEG 更改为 .jpeg)

重命名 -n 's/.JPEG$/.jpeg/' *.JPEG

相关内容