macOS终端:如何重命名已匹配的多圆点JPG文件(替换点为下划线)
批量重命名多圆点JPG文件的方案
你可以通过以下两种方式,对find匹配到的文件执行重命名操作,将文件名中除.jpg后缀外的所有圆点替换为下划线:
方案1:使用Perl版rename命令(推荐)
Perl版本的rename支持正则批量替换,结合你已有的find命令,执行效率高:
find -E . -regex '(.*\..*){2,}\.jpg' -exec rename 's/\.([^.]+)(?=\.jpg)/_$1/g' {} +
命令说明:
s/\.([^.]+)(?=\.jpg)/_$1/g:正则规则会精准匹配.jpg后缀前的所有圆点,将其替换为下划线:(?=\.jpg)是正向预查,确保只处理.jpg之前的内容,不会改动后缀;g表示全局替换,一次性处理文件名中所有符合条件的圆点。
执行前可加-n参数测试(仅打印不执行重命名):
find -E . -regex '(.*\..*){2,}\.jpg' -exec rename -n 's/\.([^.]+)(?=\.jpg)/_$1/g' {} +
方案2:纯Bash循环(全系统兼容)
如果你的系统没有Perl版rename,可以用Bash原生命令实现,兼容性更强:
find -E . -regex '(.*\..*){2,}\.jpg' -print0 | while IFS= read -r -d '' file; do dir_path=$(dirname "$file") filename_no_ext=$(basename "$file" .jpg) new_filename_no_ext=${filename_no_ext//./_} mv "$file" "${dir_path}/${new_filename_no_ext}.jpg" done
命令说明:
-print0和read -r -d '':处理包含空格、特殊字符的文件名,避免出现错误;${filename_no_ext//./_}:Bash参数扩展语法,将文件名(不含后缀)中的所有圆点替换为下划线;- 最后拼接
.jpg后缀,完成重命名。
执行前可将mv改为echo mv,先验证新文件名是否符合预期。
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

