文件重命名技术咨询:批量重命名含指定字符串的文件及移除文件名中的"(1)"后缀
批量重命名文件解决方案
嘿,这两个批量重命名的需求我都帮你梳理清楚了,分情况给你讲明白:
1. 批量重命名所有包含指定字符串的文件
根据你的系统环境,有两种常用方法可选:
方法一:Perl版rename(Linux或macOS通过Homebrew安装后可用)
假设你要把文件名里的old_str替换成new_str,直接用下面的命令就行:
rename 's/old_str/new_str/g' *
- 小提示:
g表示全局替换,如果文件名里多次出现目标字符串都会被替换;*匹配当前目录下所有文件。 - 想先预览修改效果不实际改动?加个
-n参数就好:
rename -n 's/old_str/new_str/g' *
方法二:find+mv(通用所有类Unix系统)
如果你的系统没有Perl版rename(比如默认的macOS),用find配合mv也能实现:
find . -type f -name "*old_str*" -exec bash -c 'mv "$0" "${0/old_str/new_str}"' {} \;
- 解释:
find . -type f -name "*old_str*"会找出当前目录及子目录下所有包含old_str的文件,后面的命令会自动把每个文件名里的old_str替换成new_str。 - 预览效果的话,把
mv换成echo mv即可:
find . -type f -name "*old_str*" -exec bash -c 'echo mv "$0" "${0/old_str/new_str}"' {} \;
2. 移除文件名中的"(1)"字符串(用rename命令)
针对file_name (1).extension → file_name.extension的需求,分两种rename版本处理:
Perl版rename(推荐)
因为括号在正则表达式里是特殊字符,所以要加反斜杠转义,命令如下:
rename 's/ \(1\)//g' *
- 注意:前面的空格也要带上,这样才能精准匹配
(1)这个后缀部分。 - 预览修改效果:
rename -n 's/ \(1\)//g' *
原生macOS rename
如果用的是macOS默认的rename,语法有所不同,用-s参数直接替换字符串:
rename -s " (1)" "" *
- 预览效果同样加
-n:
rename -n -s " (1)" "" *
内容的提问来源于stack exchange,提问作者ELM
相关产品推荐
相关产品推荐

