用find重命名

var*_*tir 0 linux shell

我设法用find命令找到了几个文件.文件的类型为file_sakfksanf.txt,file_afsjnanfs.pdf,file_afsnjnjans.cpp, 现在我想用rename和-exec命令将它们重命名为 mywish_sakfksanf.txt,mywish_afsjnanfs.pdf,mywish_afsnjnjans.cpp ,只改变了第一个前缀.我想要一段时间,所以不要怪我愚蠢.

小智 5

如果你仔细阅读-execman页面的部分,find就会遇到{}允许你将匹配作为参数使用的字符串-exec.这将允许您以下列方式使用rename您的find比赛:

find . -name 'file_*' -exec rename 's/file_/mywish_/' {} \;
Run Code Online (Sandbox Code Playgroud)

从手册:

-exec 命令 ;

执行命令; 如果返回0状态,则返回true.查找的所有后续参数都被视为该命令的参数,直到由;' is encountered. The string{}' 组成的参数被当前正在处理命令的参数中的任何位置处理的文件名替换,而不仅仅是在它独立的参数中,在某些版本的find中.这两种结构都可能需要进行转义(使用"\")或引用以保护它们不被shell扩展.有关使用-exec选项的示例,请参阅"示例"部分.为每个匹配的文件运行一次指定的命令.该命令在起始目录中执行.使用-exec操作时存在不可避免的安全问题; 你应该使用-execdir选项.

虽然您要求查找/执行解决方案,正如Mark Reed建议的那样,您可能需要考虑将结果用于管道xargs.如果这样做,请确保使用-print0选项with find-0or -null选项,xargs以避免因文件名中出现空格或shell元字符而导致的意外行为.另外,考虑使用(也在手册中)的+版本,-exec因为这是POSIX规范,find因此如果你想在其他地方运行你的命令(并非总是如此),应该更加便携; 它还以类似的方式构建其命令行,xargs从而导致更少的调用rename.