【问题标题】:Linux command to delete all the files older than the latest modified file/s [duplicate]Linux命令删除所有比最新修改的文​​件/秒旧的文件[重复]
【发布时间】:2019-10-24 22:14:50
【问题描述】:

问题:如何删除所有比最新修改的文​​件/s更旧的文件

以下一行命令将查找并删除除最新 6 个文件之外的所有文件 - 但我无法弄清楚如何删除所有比最新文件更旧的文件(可能有几个最新文件) -

ls -t | tail -n +6 | xargs rm --

详情: 我想删除所有早于最新修改文件日期的文件。不管它老了多少天 - 只要它比最新修改的文​​件老,它就需要被删除(比最新修改的文​​件早 100 天或 1000 天或 1 天甚至 1 分钟)。

Dir-
File 1 6/10/2019 9:40am
File 2 6/10/2019 9:37am
File 3 6/10/2019 9:40am
File 4 2/12/2019 12:39pm
File 5 7/01/2002 11:38pm

从这个目录中,运行命令后,我应该只能看到文件 1 和 3,所有其他文件都应该删除,无论这些文件有多旧,与最新修改的文​​件相比。

【问题讨论】:

  • 如果有人在对问题投反对票时可以发表评论会很好,因为这将有助于 OP 了解问题中的任何问题
  • 我没有投反对票,但为什么您只能看到文件 1 和 3 而不能看到文件 2?
  • 文件 2 是上午 9:37,比文件 1 早,文件 3 在上午 9:40 修改/添加
  • 我也没有投反对票,但这里的人想看看你到目前为止所做的尝试。你的帖子不包含任何代码,所以我敢打赌这就是它被投反对票的原因......
  • 谢谢@GoinOff,我会更新我的问题。

标签: linux bash shell


【解决方案1】:

以下应该做:

newest=$(ls -Art | tail -n 1) && \
for f in *; do if [ "$f" -ot "$newest" ]; then rm -- "$f"; fi; done

唯一限制:最新文件名不能包含换行符。

此解决方案与Delete all files except the newest 3 in bash script 不重复,因为仅使用

tail -n

无法识别是否有两个或多个最新文件(修改时间完全相同)。这就是为什么使用

[ "$f" -ot "$newest" ]

这里。

【讨论】:

  • 文件不应该包含任何空格?
  • 如果它有空白,为什么它不起作用?我想了解空格与您的命令有何关系?
  • 如果最新文件包含换行符,那么tail 将切断部分名称。不过,避免所有空格似乎是过度谨慎(当然,一旦命令更改为rm -- "$f")。
  • 最新文件名称,大概
猜你喜欢
  • 2018-04-23
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
相关资源
最近更新 更多