【发布时间】: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 -v和ls -t之间存在差异。你要哪个? -
抱歉 - 我使用 -v 是基于我发现的其他内容。 -t 成功了: ls -t | awk -F_ '++n[$1]>5' | xargs rm 谢谢!