如何在Bash中重命名所有子目录下的文件?
递归重命名所有子目录中的.txt文件为.txt2
方法1:Perl版本rename配合find(多数Linux发行版默认)
直接用find递归遍历所有文件,再调用rename处理:
find . -type f -name "*.txt" -exec rename 's/\.txt$/.txt2/' {} \;
- 细节说明:
\.txt$是正则写法,$确保只替换文件名末尾的.txt,避免误改文件名中间包含.txt的文件(比如file.txt.bak不会被错误修改)-type f限定只处理文件,跳过同名的目录{}代表find找到的每个文件路径,\;表示-exec命令的结束
方法2:util-linux版本rename(部分系统如CentOS默认)
如果你的rename是util-linux版本(语法更简单,不支持正则),用下面的命令:
find . -type f -name "*.txt" -exec rename .txt .txt2 {} \;
修正原命令的小问题
你原来的命令rename 's/.txt/.txt2' *.txt没有加$,会替换文件名中任意位置的.txt,建议单目录使用时也改成:
rename 's/\.txt$/.txt2/' *.txt
内容的提问来源于stack exchange,提问作者agm_2502
相关产品推荐
相关产品推荐

