我想删除目录中最旧的文件(超过 100 个文件的限制)。换句话说,我想确保目录中的文件不超过 100 个,如果超过限制,则删除超过限制的最旧文件。我不想只删除超过 x 天的文件,因为如果在 cronjob 上运行此操作,最终所有文件都会被删除。
我想如果我要编写这个程序,伪代码将是:
list = dir.getFiles()
list.sortByDate()
deleteList = list.getSubList(100, end) // from, to
deleteAll(deleteList)
那么适当的 Unix 命令是什么?我猜find
应该以某种方式与-exec
参数有关,但我不确定排序/限制方面。
答案1
find
应该没有必要。如果你先进入正确的目录,
rm -f `ls -rt | head -n -100`
指定路径
rm -f `ls -rt /path/to/my/dir | head -n -100`
以及cron
(在 Ubuntu 上!)
/bin/rm -f `/bin/ls -rt /path/to/my/dir | /usr/bin/head -n -100`
可以使用以下方法确定命令路径which
,例如
which ls
最后,如果文件名包含空格,则应将其括起来ls -Q
然后发送到xargs
/bin/ls -Qrt /path/to/my/dir | /usr/bin/head -n -100 | /usr/bin/xargs /bin/rm -f
(在 Ubuntu 上测试,为了您的测试,请替换rm -f
为echo
以查看要删除的内容)
答案2
您是否在重新发明日志轮换这个轮子?如果是这样,请使用 logrotate(在 Linux 系统上;其他系统会有自己的等效程序)。