Linux命令删除所有早于最新修改文件的文件

时间:2019-06-10 13:43:18

标签: linux bash shell

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

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

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

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

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,而与最新修改的文​​件相比,无论这些文件有多旧,都应该删除所有其他文件。

1 个答案:

答案 0 :(得分:2)

以下应做:

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" ]

这里。