所以我想以递归方式更改特定文件夹的名称。但是,该文件夹并不总是处于相同的深度或位置。我想将文件夹名称从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'` \;
任何帮助将不胜感激。 谢谢!!
答案 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)
尝试将find
与rename
find /var -type d -name 'variables' -type d -exec rename 's/variables/constant/' {} \;