我设法使用find命令找到了几个文件。 这些文件的类型为 file_sakfksanf.txt,file_afsjnanfs.pdf,file_afsnjnjans.cpp, 现在我想用rename和-exec命令重命名它们 mywish_sakfksanf.txt,mywish_afsjnanfs.pdf,mywish_afsnjnjans.cpp 只更改了第一个前缀。我想要一段时间,所以不要怪我愚蠢。
答案 0 :(得分:5)
如果您仔细阅读了-exec
的{{1}}页面的man
部分,您会看到find
字符串,该字符串允许您将匹配项用作{}
{1}}。这样您就可以通过以下方式在-exec
个匹配项上使用rename
:
find
从手册:
-exec 命令;
执行命令;如果返回0状态,则返回true。以下全部 查找的参数被认为是命令的参数,直到 由
find . -name 'file_*' -exec rename 's/file_/mywish_/' {} \;
{}'组成的参数被替换 通过当前文件名处理它出现在的任何地方 命令的参数,而不仅仅是在单独的参数中,如 在某些版本的find中。这两种结构都可能需要 被转义(用'\')或引用以保护它们不被扩展 贝壳。有关使用的示例,请参见“示例”部分 -exec选项。为每个匹配的文件运行一次指定的命令。该命令在起始目录中执行。有 使用-exec动作时不可避免的安全问题; 你应该使用-execdir选项。
虽然您要求提供查找/执行解决方案(建议为Mark Reed),但您可能需要考虑将结果汇总到;' is encountered. The string
。如果您这样做,请确保将xargs
选项与-print0
以及find
或-0
选项与-null
一起使用,以避免因空格或shell元字符出现在您的文件名中。另外,请考虑使用xargs
+
版本(也在手册中),因为这是-exec
的POSIX规范,因此如果您想在其他地方运行命令,则应该更具可移植性(不是总是是真的);它还以类似于find
的方式构建其命令行,这将导致xargs
的调用次数减少。
答案 1 :(得分:0)
不要以为只有找到才能做到这一点,你需要创建一个脚本:
#!/bin/bash
NEW=`echo $1 | sed -e 's/file_/mywish_/'`
mv $1 ${NEW}
你可以:
find ./ -name 'file_*' -exec my_script {} \;