查找文件名并在一行中替换子字符串



尝试使用find更改所有以a:

开头的文件中的x->y
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' _ {} +

最新更新