假设我想使用zmv将文件夹中所有子文件夹内的所有文件从
foo.txt
重命名为bar.txt
。我已经尝试过zmv '**/foo.txt' 'bar.txt'
,但这会在根文件夹中创建bar.txt
。如何保持文件在相应的子文件夹中?$1
来引用与括号分组匹配的部分来实现。通配符**
有点特殊,需要将括号放在**/
周围,不多也不少。zmv '(**/)foo.txt' '${1}bar.txt'
你可以使用-w
标志,使每个通配符自动转换为括号组。zmv -w '**/foo.txt' '${1}bar.txt'
或者您可以使用-W
标志,并在替换文本中使用通配符 — 使用此标志,替换文本中的通配符将变为$1
,$2
等。
zmv -W '**/foo.txt' '**/bar.txt'
或者,您可以使用$f
来引用源路径。
zmv '**/foo.txt' '$f:r.txt'
zmv -W
版本非常出色,完全按照预期工作。 - Jay Dorseysrc/**/foo.txt
移动到dst/**/bar.txt
,所以dst/
下的子目录可能不存在。我目前的解决方法是在zmv
前使用rsync
。 - Franklin Yu