重命名目录中的所有文件

3
我尝试重命名类似以下格式的文件: Name1_searchstats_metrics_20141230T133000036.log 为类似以下格式的文件: Name2_searchstats_metrics_20141230T133000036.log 我尝试使用以下命令进行重命名:rename -n 's/\Name1_/\Name2_/' *.log 但是出现了错误:
bash: /usr/bin/rename: Argument list too long

有谁可以帮忙吗?

这段文本与IT技术无关。

1
这是因为您有许多使用 *.log 模式扩展的文件。也许您可以使用 findwhile 循环。 - fedorqui
2个回答

6

如果你正在使用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

2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - glglgl
谢谢,我编辑了我的答案以使其更清晰。 - Mr Peach

2
如果Linux命令的参数列表过长,通常可以使用xargs命令解决问题。
请尝试以下操作:
ls *.log | xargs rename -n 's/\Name1_/\Name2_/' 

我在工作中没有访问UNIX终端的权限,因此不确定语法是否正确,但是我猜应该可以工作。 - Masked Man
使用这个命令也会得到相同的错误。 - Saurabh Verma
1
在您最初发布的命令中,尝试先使用较少数量的文件(比如10个左右)进行测试。看看是否成功。 - Masked Man
1
@SaurabhVerma 你传递给重命名命令的日志文件有多少个?如果有几百万个,那么xargs创建的子列表也可能太大了。免责声明:我不知道xargs如何将其输入拆分为子列表,即每个子列表有多大,以及rename将其输入列表视为太大的“阈值”是什么。 - Masked Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接