使用 zmv 重命名子文件夹中的文件

Renaming files in subfolders using zmv

假设我想使用 zmv 将文件夹的所有子文件夹中的所有文件从 foo.txt 重命名为 bar.txt

我试过 zmv '**/foo.txt' 'bar.txt' 但这会在根文件夹中创建 bar.txt。如何将文件保存在相应的子文件夹中?

您需要引用目标中的目录部分。您可以通过将通配符放在括号中并使用 </code> 来引用括号组匹配的部分来做到这一点。 <code>**通配符有点特殊,要求括号在**/左右,不多也不少。

zmv '(**/)foo.txt' 'bar.txt'

您可以使用 -w 标志让每个通配符自动成为括号组。

zmv -w '**/foo.txt' 'bar.txt'

或者您可以使用 -W 标志并在替换文本中使用通配符 — 使用此标志,替换文本中的通配符将变为 </code>、<code> 等.

zmv -W '**/foo.txt' '**/bar.txt'

或者,您可以使用 $f 来引用源路径。

zmv '**/foo.txt' '$f:r.txt'