使用正则表达式(shell)递归更改文件夹名称

时间:2013-11-07 17:52:56

标签: regex shell recursion

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

所以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 个答案:

答案 0 :(得分:1)

这很有趣!这是我的两分钱:

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

<强>理由:

  • -depth避免更改后来进入的路径find;可能可以省略。
  • -execdir避免了使用整​​个路径玩游戏的需要,因此我们只能在目录basename上运行
  • -T选项传递给mv,如果目录constant已经存在,则会保释

答案 1 :(得分:0)

您实际上需要致电mv,而不是echo

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

以上假设您的名称中包含字符串“variables”的目录。如果您在精确称为“变量”的目录之后,那么它可能会更简单一些:

find var -type d -name variables -exec mv {} constant \;

答案 2 :(得分:0)

尝试使用此命令:

find var -name "*variables*" -type d -exec bash -c 'mv "$1" "${1//variables/constant}"' - '{}' \;

答案 3 :(得分:0)

尝试将findrename

一起使用
find /var -type d -name 'variables' -type d -exec rename 's/variables/constant/' {} \;