如何在 ubuntu 实现在某一文件夹下超过一定数量文件(夹),保留最新 n 个文件(夹),删除其它?

2015-06-04 14:27:24 +08:00
 sisyphus60

需求:现在有一个A文件夹下存放着自动编译的output出来文件,每次自动化编译完成后,目标文件都会被复制该A文件夹下。
现在做一个脚本(后附):
自动测试A下一旦有超出20个目录,就会删除其它,但是现在遇到问题,在判断序号中用到的 i 并不是序号,但又搞了很久不知道怎么拿序号进行比较,再做出相应删除动作。对Linux操作不熟悉,请教!

ls -t -l|grep "^d"|while read i
do

if [ i -gt 20 ]; then
rm -rf $i
fi

done`

3579 次点击
所在节点    Ubuntu
9 条回复
LeoQ
2015-06-04 14:37:14 +08:00
ls -l |wc -l 试试这个这个可以探测文件夹下面有多少个文件
lululau
2015-06-04 14:49:14 +08:00
ls -t | head -n -20 | xargs -I {} rm -rf "./{}"
sisyphus60
2015-06-04 15:04:22 +08:00
@lululau 我试试,这么简洁,貌似好强大
sisyphus60
2015-06-04 15:18:27 +08:00
@lululau 好奇怪啊,ls -t是按最新时间顺序打列的,但删除结果是是按最晚时间顺序保留的。。。
kamushin
2015-06-04 15:26:52 +08:00
@sisyphus60 head改成tail
lululau
2015-06-04 15:36:56 +08:00
@sisyphus60 没注意 ls -t 的排序,改成:

ls -t | tail -n +21 | xargs -I {} rm -rf "./{}"

或者:

ls -tr | head -n -20 | xargs -I {} rm -rf "./{}"
sisyphus60
2015-06-04 15:39:26 +08:00
@kamushin 这个会删除n个,不是保留n个了,我加了-r参数,这样时间与上面的倒过来了,正好满足了需求。同谢!
sisyphus60
2015-06-04 16:07:21 +08:00
@lululau 嗯嗯,我后面改了时间排序。对了,还得再请教个问题:
怎么列出过去24小时之外的所有文件啊、
lululau
2015-06-05 22:22:31 +08:00
@sisyphus60 find -ctime

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/196071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX