用find重命名

时间:2012-09-29 17:28:03

标签: linux shell

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

2 个答案:

答案 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 {} \;