重命名目录中的所有文件

我试图重命名这样的文件: Name1_searchstats_metrics_20141230T133000036.log类似于: Name2_searchstats_metrics_20141230T133000036.log

我试图: rename -n 's/\Name1_/\Name2_/' *.log但是得到错误:

 bash: /usr/bin/rename: Argument list too long 

有人可以帮忙吗?

可能是最简单的解决方案,因为你使用bash是用for循环迭代文件列表:

 $ for i in *; do rename -n 's/Name1_/Name2_/' $i; done 

您还可以通过在命令中使用任何通配符(如*.log来过滤文件(如果需要)。

还有其他更复杂的方法来实现这一点,特别是如果您需要对文件名进行特定的字符串处理时,即使用awkfind -exec ,但希望这可以帮助您以一种清晰的方式进行分类。

编辑回答建议@glglgl

上面的更全面和详细的解释可以在超级用户上找到: https : //superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script

如果参数列表对于一个linux命令来说太长, xargs通常会被救援。

尝试这个:

 ls *.log | xargs rename -n 's/\Name1_/\Name2_/'