我试图把文件重命名像所有文件: Name1_searchstats_metrics_20141230T133000036.log 喜欢的东西:Name2_searchstats_metrics_20141230T133000036.log重命名目录
我想:rename -n 's/\Name1_/\Name2_/' *.log
,但我得到的错误:
bash: /usr/bin/rename: Argument list too long
有人可以帮忙吗?
我试图把文件重命名像所有文件: 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
。
还有其他更令人费解的方式来实现这一点,特别是如果你需要做文件名的特定字符串操作,即使用awk
或find -exec
,但希望这可以帮助你的事情了以明确的方式进行排序。
由@glglgl建议编辑答案
的一个更全面,更详细的解释以上可在超级用户发现: https://superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script
'因为我* .log'没有这些限制,并且使用''''''''''总是容易出错,应该避免。 – glglgl
谢谢,编辑我的答案更加清晰。 –
我在这里没有访问UNIX终端的工作,所以不知道我的语法是否正确,但我猜它应该工作。 –
也得到这个命令同样的错误 –
在你原来的命令(你发布的问题),尝试通过第一次喂它更少的文件数量(说10左右)。看看是否成功。 –
这是因为你必须用'* .LOG扩大这么多的文件'模式。也许你可以使用'find'或'while'循环 – fedorqui