【问题标题】:Delete all except the most recent n files of each prefix (based on file date)?删除除每个前缀的最近 n 个文件之外的所有文件(基于文件日期)?
【发布时间】:2015-10-03 09:23:59
【问题描述】:

我在我的脚本中运行这个命令,它会删除每个文件中除了 5 个之外的所有文件,但它不会保留基于日期的最后 5 个文件:

ls -rv | awk -F_ '++n[$1]>5' | xargs rm

**下划线是前缀(主机名)和文件名之间的分隔符。

我也尝试了其他一些方法,但似乎没有奏效。

我正在运行它来删除文件夹中除最后 n 个文件之外的所有文件,它可以正常工作:

rm -f $(ls -1t -I "*.sh" | tail -n +21)

这适用于一切。

我有另一个文件夹,里面装满了来自各种设备的备份,这些设备都有主机名前缀。格式为:hostname_config.backup-timestamp。

【问题讨论】:

  • 在您的第一个命令中,您缺少 t 参数 ls 以按时间顺序列出文件。
  • 学习调试代码,一次一个管道段,添加“下一个”段,因为您看到前一个段按预期工作。祝你好运。
  • 您要使用文件的文件系统时间戳之一,还是编码到文件名中的时间戳?
  • ls -vls -t 之间存在差异。你要哪个?
  • 抱歉 - 我使用 -v 是基于我发现的其他内容。 -t 成功了: ls -t | awk -F_ '++n[$1]>5' | xargs rm 谢谢!

标签: linux bash shell awk


【解决方案1】:

@rici 解决了它。转储 -rv 标志并使用 -t 创建了我正在寻找的行为。

ls -t | awk -F_ '++n[$1]>5' | xargs rm

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 2016-02-29
    • 2020-10-26
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    相关资源
    最近更新 更多