CentOS中跨多文件夹批量重命名多个文件的方法求助
跨子目录批量重命名文件的解决方案
方法1:find + rename 组合(简洁高效)
这是最推荐的方式,适配大部分Linux系统:
find folder1 -type f -name "OLDfile.*" -exec rename 's/OLDfile/NEWfile/' {} +
命令分解:
find folder1:从folder1目录开始递归遍历所有子目录-type f:仅匹配文件(跳过目录,避免误操作)-name "OLDfile.*":精准匹配所有以OLDfile开头的文件,保留任意后缀-exec rename 's/OLDfile/NEWfile/' {} +:对找到的所有文件执行Perl风格的rename命令,将文件名中的OLDfile替换为NEWfile
如果你的系统使用的是util-linux版本的rename(部分发行版默认),可以改用以下命令:
find folder1 -type f -name "OLDfile.*" -exec rename OLDfile NEWfile {} +
方法2:find + mv 组合(兼容性拉满)
如果系统没有合适的rename工具,用bash内置的字符串替换结合mv也能实现:
find folder1 -type f -name "OLDfile.*" -exec bash -c 'mv "$0" "${0/OLDfile/NEWfile}"' {} \;
命令分解:
-exec bash -c '...' {} \;:为每个找到的文件启动一个bash子进程执行重命名逻辑"${0/OLDfile/NEWfile}":利用bash的字符串替换特性,把原路径中的OLDfile替换为NEWfile,自动保留原文件的路径和后缀名
执行以上任意命令后,你的文件结构会完全符合预期:
folder1/folderA1/folderA2/folderA3/OLDfile.jpeg→folder1/folderA1/folderA2/folderA3/NEWfile.jpegfolder1/folderB1/folderB2/folderB3/OLDfile.exr→folder1/folderB1/folderB2/folderB3/NEWfile.exr
内容的提问来源于stack exchange,提问作者spoax
相关产品推荐
相关产品推荐

