V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sisyphus60
V2EX  ›  Ubuntu

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

  •  
  •   sisyphus60 · 2015-06-04 14:27:24 +08:00 · 3689 次点击
    这是一个创建于 3462 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:现在有一个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`

    9 条回复    2015-06-05 22:22:31 +08:00
    LeoQ
        1
    LeoQ  
       2015-06-04 14:37:14 +08:00 via Android
    ls -l |wc -l 试试这个这个可以探测文件夹下面有多少个文件
    lululau
        2
    lululau  
       2015-06-04 14:49:14 +08:00   ❤️ 1
    ls -t | head -n -20 | xargs -I {} rm -rf "./{}"
    sisyphus60
        3
    sisyphus60  
    OP
       2015-06-04 15:04:22 +08:00
    @lululau 我试试,这么简洁,貌似好强大
    sisyphus60
        4
    sisyphus60  
    OP
       2015-06-04 15:18:27 +08:00
    @lululau 好奇怪啊,ls -t是按最新时间顺序打列的,但删除结果是是按最晚时间顺序保留的。。。
    kamushin
        5
    kamushin  
       2015-06-04 15:26:52 +08:00
    @sisyphus60 head改成tail
    lululau
        6
    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
        7
    sisyphus60  
    OP
       2015-06-04 15:39:26 +08:00
    @kamushin 这个会删除n个,不是保留n个了,我加了-r参数,这样时间与上面的倒过来了,正好满足了需求。同谢!
    sisyphus60
        8
    sisyphus60  
    OP
       2015-06-04 16:07:21 +08:00
    @lululau 嗯嗯,我后面改了时间排序。对了,还得再请教个问题:
    怎么列出过去24小时之外的所有文件啊、
    lululau
        9
    lululau  
       2015-06-05 22:22:31 +08:00 via iPad
    @sisyphus60 find -ctime
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:43 · PVG 22:43 · LAX 06:43 · JFK 09:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.