尝试使用find
更改所有以a:
find . -iname "a*" -exec mv {} $(z="{}";echo ${z/x/y}) ;
但是不能用
请解释一下原因。
感谢操作顺序错误。{}
在运行时被find
命令替换,但是像您的命令替换这样的展开发生在命令运行之前,因此z="{}"
是一个文字赋值。
-exec
的shell,您可以将文件名作为参数传递,并对其执行操作。
# launch one shell per file found
find . -iname "a*" -exec /bin/bash -c 'mv "${1}" "${1/x/y}"' _ {} ;
# launch one shell to handle all files in a single command - faster if you have a lot of files
find . -iname "a*" -exec /bin/bash -c 'for file ; do mv "${file}" "${file/x/y}" ; done' _ {} +