![如何用一个命令更改所有文件前缀?](https://linux22.com/image/1075602/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E6%9B%B4%E6%94%B9%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%89%8D%E7%BC%80%EF%BC%9F.png)
我需要将所有文件的后缀(均为 .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