2015-01-02 154 views
2

我试图把文件重命名像所有文件: Name1_searchstats_metrics_20141230T133000036.log 喜欢的东西:Name2_searchstats_metrics_20141230T133000036.log重命名目录

我想:rename -n 's/\Name1_/\Name2_/' *.log,但我得到的错误:

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

有人可以帮忙吗?

+1

这是因为你必须用'* .LOG扩大这么多的文件'模式。也许你可以使用'find'或'while'循环 – fedorqui

回答

4

可能是最简单的解决方案,因为你正在使用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

+1

'因为我* .log'没有这些限制,并且使用''''''''''总是容易出错,应该避免。 – glglgl

+0

谢谢,编辑我的答案更加清晰。 –

2

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

试试这个:

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

我在这里没有访问UNIX终端的工作,所以不知道我的语法是否正确,但我猜它应该工作。 –

+0

也得到这个命令同样的错误 –

+1

在你原来的命令(你发布的问题),尝试通过第一次喂它更少的文件数量(说10左右)。看看是否成功。 –