0

所以我想递归地更改特定文件夹的名称。但是,该文件夹并不总是处于相同的深度或位置。我想将文件夹名称从 更改variablesconstant

所以variables文件夹可能位于深度 2、和/或 3、和/或 4、和/或 5、6 等...我不知道

有可能

/var/me/variables/.../.../

或者

/var/me/..../..../.../variables/...

或者

/var/variables/..../variables/.../../variables/

我再次想要的是,在哪里有一个名为 的文件夹variables,将其名称更改为constant

我做了以下代码,但它不起作用

find var -type d -exec echo `echo "{}" | sed 's/variables/constant/g'` \;

任何帮助,将不胜感激。谢谢!!

4

4 回答 4

1

这很好玩!这是我的两分钱:

find . -depth -type d -name variables -execdir mv -T {} constant \;

理由:

  • -depth避免改变find以后下降的路径;大概可以省略。
  • -execdir避免了玩整个路径的游戏,所以我们可以只对目录basename进行操作
  • 如果目录应该已经存在,则传递-T选项以mv使其保释constant
于 2013-11-07T22:40:05.257 回答
0

你实际上需要打电话mv,而不是echo

find var -type d -name "*variables*" -exec mv {} `echo "{}" | sed 's/variables/constant/g'` \;

以上假设您有名称中带有字符串“变量”的目录。如果您正在寻找被精确称为“变量”的目录,那么它可能会更简单一些:

find var -type d -name variables -exec mv {} constant \;
于 2013-11-07T17:56:32.090 回答
0

试试这个查找命令:

find var -name "*variables*" -type d -exec bash -c 'mv "$1" "${1//variables/constant}"' - '{}' \;
于 2013-11-07T20:39:37.297 回答
0

尝试find使用rename

find /var -type d -name 'variables' -type d -exec rename 's/variables/constant/' {} \;
于 2013-11-07T22:30:59.810 回答