You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量重命名多个文件夹中文件名含file的文件为含doc的文件

问题根因

你使用的反引号(`)包裹的命令会在find执行前就被shell提前解析,此时占位符{}还没有被find替换为实际匹配到的文件名,echo {} | sed "s/file/doc/"的执行结果就是原始的{},最终你的命令等价于find . -name "*file*" -exec mv {} {} \;,自然会报错提示两个路径为同一个文件。


解决方案

方法1:使用bash子shell执行重命名逻辑(兼容性最好,无需额外安装工具)

find . -name "*file*" -exec bash -c 'mv "$0" "${0/file/doc}"' {} \;

这里用bash内置的字符串替换功能替代sed,执行效率更高,如果你习惯用sed也可以用下面的写法:

find . -name "*file*" -exec bash -c 'mv "$1" "$(echo "$1" | sed "s/file/doc/")"' _ {} \;

其中_是给子shell的$0占位用的无意义字符,{}匹配到的文件名会作为$1传入子shell。

方法2:使用rename工具(写法更简洁)

如果你的系统带Perl版本的rename(大部分发行版默认预装),可以直接执行:

find . -name "*file*" -exec rename 's/file/doc/' {} +

如果是Debian/Ubuntu系默认带的util-linux版本rename,命令写法调整为:

find . -name "*file*" -exec rename file doc {} +

这里结尾的+是让find把批量匹配到的文件一次性传给rename,执行效率比\;逐个执行更高。


内容的提问来源于stack exchange,提问作者TVG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:51:02