我想说我想使用zmv将文件夹的所有子文件夹中的所有文件从foo.txt
重命名为bar.txt
。
我已尝试zmv '**/foo.txt' 'bar.txt'
,但这会在根文件夹中创建bar.txt
。如何将文件保存在相应的子文件夹中?
答案 0 :(得分:1)
您需要引用目标中的目录部分。您可以通过将通配符放在括号中并使用$1
来引用括号组匹配的部分来实现。 **
通配符有点特殊,要求括号在**/
附近,不多也不少。
zmv '(**/)foo.txt' '${1}bar.txt'
您可以使用-w
标志将每个通配符自动转换为括号组。
zmv -w '**/foo.txt' '${1}bar.txt'
或者您可以使用-W
标记并在替换文本中使用通配符 - 使用此标记,替换文本中的通配符将变为$1
,$2
等。< / p>
zmv -W '**/foo.txt' '**/bar.txt'
或者,您可以使用$f
来引用源路径。
zmv '**/foo.txt' '$f:r.txt'