重命名目录中的所有文件
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
。
还有其他更复杂的方法来实现这一点,特别是如果您需要对文件名进行特定的字符串操作,即使用 awk
或 find -exec
,但希望这可以帮助您排序把事情弄清楚。
根据@glglgl 的建议编辑答案
上面更全面详细的解释可以在superuser上找到:
https://superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script
我正在尝试重命名文件,例如: 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
。
还有其他更复杂的方法来实现这一点,特别是如果您需要对文件名进行特定的字符串操作,即使用 awk
或 find -exec
,但希望这可以帮助您排序把事情弄清楚。
根据@glglgl 的建议编辑答案
上面更全面详细的解释可以在superuser上找到: https://superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script