问题: 如何删除目录中除最新3个文件以外的所有文件?
查找最新的3个文件很简单:
ls -t | head -3
但是我需要找到除最新的3个文件之外的所有文件。我该怎么做,以及如何在同一行中删除这些文件而又不会造成不必要的for循环?
我为此使用Debian Wheezy和bash脚本。
这将列出所有文件,但最新的三个除外:
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