一尘不染

删除bash脚本中除最新3个文件以外的所有文件

linux

问题: 如何删除目录中除最新3个文件以外的所有文件?

查找最新的3个文件很简单:

ls -t | head -3

但是我需要找到除最新的3个文件之外的所有文件。我该怎么做,以及如何在同一行中删除这些文件而又不会造成不必要的for循环?

我为此使用Debian Wheezy和bash脚本。


阅读 311

收藏
2020-06-03

共1个答案

一尘不染

这将列出所有文件,但最新的三个除外:

ls -t | tail -n +4

这将删除这些文件:

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

这还将列出点文件:

ls -At | tail -n +4

并使用dotfiles删除:

ls -At | tail -n +4 | xargs rm --

但请注意:ls文件名包含有趣的字符(例如换行符或空格)时,进行解析很危险。如果确定文件名不包含有趣的字符,则解析ls是非常安全的,如果是一次性脚本,则解析会更加安全。

如果您要开发一个脚本以供重复使用,那么您一定不应该解析其输出ls并使用此处描述的方法:http
//mywiki.wooledge.org/ParsingLs
2020-06-03