问题:如何删除所有早于最新修改文件的文件
以下一行命令将查找并删除除最新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,而与最新修改的文件相比,无论这些文件有多旧,都应该删除所有其他文件。
答案 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" ]
这里。