Linux命令删除比最新修改的文件旧的所有文件

Linux命令删除比最新修改的文件旧的所有文件,linux,bash,shell,Linux,Bash,Shell,问题:如何删除比最新修改的文件旧的所有文件 以下一行命令将查找并删除除最新的6个文件之外的所有文件-但我无法确定如何删除比最新文件旧的所有文件(可能有多个最新文件)- 详细信息: 我想删除所有早于最新修改文件日期的文件。不管它比最新修改的文件早多少天,只要它比最新修改的文件早,就需要删除它(比最新修改的文件早100天或1000天或1天甚至1分钟) 从这个目录中,在运行命令后,我应该只能看到文件1和3,所有其他文件都应该被删除,无论这些文件与最新修改的文件相比有多旧。以下操作应该完成: newes

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

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

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


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

以下操作应该完成:

newest=$(ls -Art | tail -n 1) && \
for f in *; do if [ "$f" -ot "$newest" ]; then rm -- "$f"; fi; done
唯一限制:最新文件名不能包含换行符

此解决方案不会复制到,因为仅使用

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

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

此处。

应执行以下操作:

newest=$(ls -Art | tail -n 1) && \
for f in *; do if [ "$f" -ot "$newest" ]; then rm -- "$f"; fi; done
唯一限制:最新文件名不能包含换行符

此解决方案不会复制到,因为仅使用

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

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

这里。

如果有人在否决某个问题时可以发表评论,那就太好了,因为这将有助于OP了解问题中的错误,我没有否决,但是为什么你只能看到文件1和3,而不能看到文件2?文件2是上午9:37,比文件1和3在9:40被修改/添加。AMI也没有否决,但这里的人想看看你迄今为止尝试了什么。你的帖子没有代码,所以我打赌这就是为什么它被否决了…谢谢@GoinOff,我将更新我的问题。如果有人在否决某个问题时可以发表评论,那将很好,因为这将有助于OP了解问题中的错误,我没有否决,但是为什么你只能看到文件1和3,而不能看到文件2?文件2是上午9:37,比文件1和3在9:40被修改/添加。AMI也没有否决,但这里的人想看看你迄今为止尝试了什么。你的帖子没有代码,所以我打赌这就是为什么它被否决了…谢谢@GoinOff,我将更新我的问题。文件不应该包含任何空格?如果有空格为什么不起作用?我正在试图理解空格与您的命令之间的关系?如果最新文件包含换行符,则
尾部将删除部分名称。不过,避免使用所有空格似乎是过分谨慎了(当然,一旦命令更改为
rm--“$f”
)。最新的文件名,假定文件不应该包含任何空格?如果它有空格,为什么不起作用?我正在试图理解空格与您的命令之间的关系?如果最新文件包含换行符,则
尾部将删除部分名称。不过,避免使用所有空格看起来确实过于谨慎了(一旦命令更改为
rm--“$f”