递归重命名文件夹/目录

3

我想要递归地重命名文件夹/目录的名称,并在SO上找到了这个解决方案。然而,这个命令没有效果。

find . -type f -exec rename 's/old/new/' '{}' \;

这是一个正确的命令吗?


f 代表文件。d 代表目录(在Unix环境中,“文件夹”不是一个常用的术语)。 - Mat
不带exec部分运行find命令会有任何作用吗? - Mat
检查您的shell脚本是否有效的一种方法是回显命令。例如:(请注意,{}不在''中)find . -type d -exec echo rename 's/a_/b_/' '{}' \;输出是否符合您的预期?如果是,请将其导入到shell中:P - Ahmed Masud
可以只使用循环代替 for f in $( find . -type f -name "*a*" ); do mv $f $(basename $f | sed "s/a/b/") ; done - user3442743
是的,对我来说可以运行。你遇到什么问题了吗?有错误吗? - user3442743
显示剩余2条评论
1个回答

5
find . -depth -name '*a_*' -execdir bash -c 'mv "$0" "${0//a_/b_}"' {} \;
< p > -depth 开关很重要,因为它可以在处理目录本身之前处理目录内容!否则你会遇到问题:)

对于文件名带有空格或其他奇怪符号的情况完全安全。


是的。那是一个更简单的解决方案。我会清理原始帖子。 - mahmood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接