【问题标题】: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 循环

标签: linux file-rename


【解决方案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 是如何将其输入拆分为子列表的,即每个子列表有多大,以及重命名的“阈值”是多少才能认为其输入列表太大。
猜你喜欢
  • 2014-05-16
  • 2014-11-08
  • 2014-10-09
  • 2013-08-20
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2023-03-25
相关资源
最近更新 更多