Zsh 需要使用zmv递归重命名多个文件

Zsh 需要使用zmv递归重命名多个文件,zsh,Zsh,所以我现在正在和一个剧本作斗争。我用的是zsh。我试过各种组合,但都不对。尝试递归地更改文件名。所以基本上我有一个变量:file1。 我想做的是这样的: zmv -W ${file1}/'**/*(test)*' ${file1}/'**/*red*' 这会将子目录中的任何文件或文件夹从test递归更改为红色。因此: 如果$file1=/var/log,则应更改: /var/log/jump/green测试.txt至/var/log/jump/green红色.txt 也 /var/log/ju

所以我现在正在和一个剧本作斗争。我用的是zsh。我试过各种组合,但都不对。尝试递归地更改文件名。所以基本上我有一个变量:file1。 我想做的是这样的:

zmv -W ${file1}/'**/*(test)*' ${file1}/'**/*red*'
这会将子目录中的任何文件或文件夹从test递归更改为红色。因此: 如果$file1=/var/log,则应更改:

/var/log/jump/green测试.txt至/var/log/jump/green红色.txt

/var/log/jump/1/1/测试/测试.xyz到/var/log/jump/1/1/红色/红色.xyz

基本上,如果我进行搜索:
ls**/*test*
它将递归列出包含“test”一词的所有文件和文件夹。对于zmv解决方案,我希望“找到”这些实例并将测试更改为红色


我该怎么做呢?

我希望您先用
-n
试试这些东西

除此之外,在我看来唯一错误的部分是
test
周围的括号。为非通配符的内容引入新的模式变量,但
-W
总是隐式地引入组和引用。因此,我会尝试与它

zmv -Wn $file1/'**/*test*' $file1/'**/*red*'

如果有效,请删除
-n

Hi@user1934428。谢谢我用了-n,所以很好:)好吧,所以我试着用一个不同的组合来代替……事实上,我试过你的解决方案,但是它不起作用……似乎
zmv-Wn$file1/'***test*'$file1/'***red*'
起作用,但是
zmv-Wn$file1/'***good*'$file1/'***red*'
有如下错误
zmv:239:未找到匹配项:/var/log/***good(*)(odon)
实际上已经发现我可以使用
g
go
goo
但只要我想
好的
替换,它就会给出错误……真的很奇怪!你从哪里弄到奥东的那部分?在尝试zmv之前,您是否检查了
echo$file1/***test*
是否返回了合理的文件?嗨,所以当我尝试以良好的性能运行命令时,带odon位的字符串实际上是从shell获得的输出。如前所述,它可以工作,但不能像字符串一样好…太奇怪了。。。试着站在你这边,用“好”代替“测试”…嗨,接受你的答案。好像我做的一个测试改变了文件名。如果找不到字符串,就会出现该错误…..因为括号仍在
*
的周围,所以它会使我感觉不舒服。。。。谢谢你的帮助