重命名目录中的所有文件[重复]
Posted
技术标签:
【中文标题】重命名目录中的所有文件[重复]【英文标题】:Rename all files in directory [duplicate] 【发布时间】:2015-02-28 15:22:50 【问题描述】:我正在尝试重命名文件,例如: Name1_searchstats_metrics_20141230T133000036.log 类似于:Name2_searchstats_metrics_20141230T133000036.log
我正在尝试:rename -n 's/\Name1_/\Name2_/' *.log
,但出现错误:
bash: /usr/bin/rename: Argument list too long
有人可以帮忙吗?
【问题讨论】:
这是因为您有太多使用*.log
模式扩展的文件。也许你可以使用find
或while
循环
【参考方案1】:
可能是最简单的解决方案,因为您使用的是 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
【讨论】:
for i in *.log
没有这些限制,使用`ls
`总是容易出错,应该避免。
谢谢,编辑我的答案更清楚。【参考方案2】:
如果参数列表对于 linux 命令来说太长,xargs
通常会派上用场。
试试这个:
ls *.log | xargs rename -n 's/\Name1_/\Name2_/'
【讨论】:
我在工作中无法访问 UNIX 终端,所以不确定我的语法是否正确,但我想应该可以。 使用此命令也会出现同样的错误 在您的原始命令(您在问题中发布的)中,首先尝试提供较少数量的文件(例如 10 个左右)。看看是否成功。 @SaurabhVerma 您将多少日志文件传递给重命名命令?如果是几百万,可能是xargs创建的子列表也太大了。免责声明:我不知道 xargs 是如何将其输入拆分为子列表的,即每个子列表有多大,以及重命名的“阈值”是多少才能认为其输入列表太大。以上是关于重命名目录中的所有文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章