重命名目录中的所有文件[重复]

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 模式扩展的文件。也许你可以使用findwhile 循环 【参考方案1】:

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

【讨论】:

for i in *.log没有这些限制,使用`ls`总是容易出错,应该避免。 谢谢,编辑我的答案更清楚。【参考方案2】:

如果参数列表对于 linux 命令来说太长,xargs 通常会派上用场。

试试这个:

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

【讨论】:

我在工作中无法访问 UNIX 终端,所以不确定我的语法是否正确,但我想应该可以。 使用此命令也会出现同样的错误 在您的原始命令(您在问题中发布的)中,首先尝试提供较少数量的文件(例如 10 个左右)。看看是否成功。 @SaurabhVerma 您将多少日志文件传递给重命名命令?如果是几百万,可能是xargs创建的子列表太大了。免责声明:我不知道 xargs 是如何将其输入拆分为子列表的,即每个子列表有多大,以及重命名的“阈值”是多少才能认为其输入列表太大。

以上是关于重命名目录中的所有文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

DOS按规则批量重命名所有(子)目录下文件

在Python中重命名目录中的多个文件[重复]

重命名目录中的所有文件?

重命名 NSLibraryDirectory 中的所有文件和目录

python重命名子目录中的所有文件

使用 Windows 批处理脚本重命名目录中的所有文件