我正在尝试将所有文件夹_Oreilly
(完全匹配)递归重命名为_OreillyFox
换句话说,我试图达到与以下相同的效果:
find . -depth -type d -name "_Oreilly" -execdir rename "s/_Oreilly/_OreillyFox/" {} \;
使用zmv
。
我正在尝试的命令是:
zmv -n '(**/)_Oreilly' '${1}_OreillyFox'
我尝试了上述命令,并传入了文件名,但它成功重命名了它们。我只想重命名目录。
在 中
zmv
,默认情况下,必须使用(#q<qualifiers>)
扩展的 glob 语法指定 glob 限定符。(<qualifiers>)
“裸 glob 限定符”短语法默认处于禁用状态,因为即使对于不包含的内容(这消除了它们与裸 glob 限定符的歧义)(...)
,分组 glob 运算符在 中也被广泛使用,除非您传递恢复它们的选项。zmv
|
-Q
因此,您需要:
或者:
(其中是选择目录
/
类型文件的限定符;更改为在符号链接解析之后进行的检查(如 GNU的)或 IOW 也将符号链接重命名为目录)。-/
find
-xtype d
或者,正如@steeldriver 在现已删除的答案中指出的那样:
依靠完整路径存储在的事实
$f
。请注意,
zmv
默认情况下会进行深度优先遍历,您不需要使用od
限定符明确要求它。与相反
find
,它默认跳过隐藏文件和目录;D
如果您还想在隐藏目录层次结构中找到这些目录并重命名它们,请添加限定符。是的,我可以通过一些小的调整来重现它,结果发现:
还有你的 zmv 命令(不带 -n。这是试运行)
对于我来说,这两种方法都有效,在 Ubuntu 上使用 zsh。