sisyphus60
V2EX  ›  Ubuntu

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

  •  
  •   sisyphus60 · Jun 4, 2015 · 4219 views
    This topic created in 4022 days ago, the information mentioned may be changed or developed.

    需求:现在有一个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 replies    2015-06-05 22:22:31 +08:00
    LeoQ
        1
    LeoQ  
       Jun 4, 2015 via Android
    ls -l |wc -l 试试这个这个可以探测文件夹下面有多少个文件
    lululau
        2
    lululau  
       Jun 4, 2015   ❤️ 1
    ls -t | head -n -20 | xargs -I {} rm -rf "./{}"
    sisyphus60
        3
    sisyphus60  
    OP
       Jun 4, 2015
    @lululau 我试试,这么简洁,貌似好强大
    sisyphus60
        4
    sisyphus60  
    OP
       Jun 4, 2015
    @lululau 好奇怪啊,ls -t是按最新时间顺序打列的,但删除结果是是按最晚时间顺序保留的。。。
    kamushin
        5
    kamushin  
       Jun 4, 2015
    @sisyphus60 head改成tail
    lululau
        6
    lululau  
       Jun 4, 2015
    @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
       Jun 4, 2015
    @kamushin 这个会删除n个,不是保留n个了,我加了-r参数,这样时间与上面的倒过来了,正好满足了需求。同谢!
    sisyphus60
        8
    sisyphus60  
    OP
       Jun 4, 2015
    @lululau 嗯嗯,我后面改了时间排序。对了,还得再请教个问题:
    怎么列出过去24小时之外的所有文件啊、
    lululau
        9
    lululau  
       Jun 5, 2015 via iPad
    @sisyphus60 find -ctime
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3127 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:30 · PVG 21:30 · LAX 06:30 · JFK 09:30
    ♥ Do have faith in what you're doing.