重命名目录中的所有文件

Rename all files in directory

我正在尝试重命名文件,例如: Name1_searchstats_metrics_20141230T133000036.log 类似于:Name2_searchstats_metrics_20141230T133000036.log

我正在尝试:rename -n 's/\Name1_/\Name2_/' *.log 但出现错误:

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

有人可以帮忙吗?

如果参数列表对于 linux 命令来说太长,xargs 通常可以解决问题。

试试这个:

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

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

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

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

还有其他更复杂的方法来实现这一点,特别是如果您需要对文件名进行特定的字符串操作,即使用 awkfind -exec,但希望这可以帮助您排序把事情弄清楚。

根据@glglgl 的建议编辑答案

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