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

dan*_*_18 4 linux zsh

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

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

Gil*_*il' 7

您需要引用目标中的目录部分。您可以通过将通配符放在括号中并使用$1来引用括号组匹配的部分来做到这一点。该**通配符是一个有点特殊的,要求括号周围**/,没有更多,不会少。

zmv '(**/)foo.txt' '${1}bar.txt'
Run Code Online (Sandbox Code Playgroud)

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

zmv -w '**/foo.txt' '${1}bar.txt'
Run Code Online (Sandbox Code Playgroud)

或者你可以使用-W标志和使用通配符替换文本-使用此标志,在替换文本通配符都变成了$1$2等等。

zmv -W '**/foo.txt' '**/bar.txt'
Run Code Online (Sandbox Code Playgroud)

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

zmv '**/foo.txt' '$f:r.txt'
Run Code Online (Sandbox Code Playgroud)