使用Bash批量去除文件名前缀(编号及短横线)
批量重命名文件:去除开头编号及短横线
这里有两种适合新手的Bash方法,帮你完成批量重命名:
方法1:用Bash基础循环(无需额外工具)
先执行测试命令,确认要重命名的操作正确:
for file in [0-9][0-9]\ -\ *.txt; do echo mv -- "$file" "${file#* - }" done
如果输出的重命名命令符合预期,去掉echo执行实际操作:
for file in [0-9][0-9]\ -\ *.txt; do mv -- "$file" "${file#* - }" done
命令解释
[0-9][0-9]\ -\ *.txt:精准匹配目标文件(两位数字+空格+短横线+空格开头的txt文件),避免误操作其他文件${file#* - }:Bash参数扩展,自动删除文件名开头到第一个-(空格+短横线+空格)的部分,直接得到你想要的文件名mv -- "$file":--防止文件名以短横线开头时出错,引号包裹文件名适配含空格的场景
方法2:用rename命令(部分Linux发行版预装)
如果你的系统有rename命令(比如Debian/Ubuntu默认带Perl版),可以用更简洁的正则替换:
先测试:
rename -n 's/^\d{2} - //' *.txt
确认输出正确后,去掉-n执行:
rename 's/^\d{2} - //' *.txt
命令解释
s/^\d{2} - //:正则表达式规则,^匹配文件名开头,\d{2}匹配两位数字,后续的-是要删除的分隔符,整体作用是删掉开头的编号及分隔符
注意事项
- 操作前建议备份文件,或先在测试目录验证命令
- 确保当前目录只有目标重命名文件,避免误处理
内容的提问来源于stack exchange,提问作者Turbotanten
相关产品推荐
相关产品推荐

