• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wsds
V2EX  ›  程序员

Linux 中,如何按条件删除一个文件夹下的文件,文件夹中共 40g 内容,我要删掉 10g,怎么操作

  •  
  •   wsds · Jul 6, 2018 · 4276 views
    This topic created in 2876 days ago, the information mentioned may be changed or developed.

    linux 中,如何按条件删除一个文件夹下的文件,文件夹中共 40G 内容(散文件),我要删掉 10G,保留 30G 的,怎么操作

    ps: 硬盘全满,准备清理出来 10G,把另外 30G 压缩了拷出来

    Supplement 1  ·  Jul 6, 2018
    只 care 容量,不 care 内容
    25 replies    2018-07-07 14:00:20 +08:00
    blankme
        1
    blankme  
       Jul 6, 2018 via Android
    按条件筛选出文件,pipe 配合 xargs 传给 rm
    pagict
        2
    pagict  
       Jul 6, 2018
    find [path] [option] --delete
    likuku
        3
    likuku  
       Jul 6, 2018
    条件呢?条件都没表示出来...

    只在乎容量的话,Python 配合 bash 就可以,bash 够强的话,纯 bash 也行。

    思路:
    获得所有文件名列表,遍历列表(或者按某种规则 /顺序,你想的话),
    对每个文件探测其大小,字节为单位,du 或者 ls -l 或 py 的 os 模块里 相关工具,
    记录文件大小,将大小其累加,累计不超过 10G (10240000000Bytes) 时,即呼叫 rm -fv 删除之,
    直到累计达到 10G,则终止程序。
    yanaraika
        4
    yanaraika  
       Jul 6, 2018
    不要 xargs,用 2 楼说的 find --delete。因为如果文件名有奇异字符 xargs rm 有安全问题
    frostming
        5
    frostming  
       Jul 6, 2018
    这个需求很奇怪啊。

    既然能接受无差别随机删除某些文件,为什么不直接全删了?
    如果只删满足某条件的文件,用楼上的方法就行。那就不一定是删 10G 了。
    lululau
        6
    lululau  
       Jul 6, 2018
    又是 40g 又是 10g 的,好奇这个是怎么称出来的
    jedihy
        7
    jedihy  
       Jul 6, 2018 via iPhone
    这好像是一个背包问题
    pynix
        8
    pynix  
       Jul 6, 2018
    既然能接受无差别随机删除某些文件,为什么不直接全删了?
    pynix
        9
    pynix  
       Jul 6, 2018
    随机删除岛国动作片吧。。
    chengran630
        10
    chengran630  
       Jul 6, 2018   ❤️ 1
    用 winscp 登陆 linux,进入文件夹,选择大小排列,多选 删除
    搞定!
    araraloren
        11
    araraloren  
       Jul 6, 2018
    不在乎内容 或者 大约数 剩 30G 的话

    shell 版:
    find . | perl -nE 'exit if qx/du -sh ./ <= 30; chomp; next if (! -e $_); print "rm $_ : ", system("rm -rf '"'"'${_}\'"'"'"); '
    文件名用单引号引起来
    openbsd
        12
    openbsd  
       Jul 6, 2018
    find /你的目录 -type f -size +500M -delete ?
    大于 500M 的全干掉 ?
    ShareDuck
        13
    ShareDuck  
       Jul 6, 2018 via Android
    既然可以随便删,说明文件没什么用,既然如此,何必不全删除掉??
    ryd994
        14
    ryd994  
       Jul 6, 2018 via Android
    用 find 随机选取若干,删掉,检查容量大于 30G 则重复
    用 bash 最多 10 行实现,非常简单的任务
    ryd994
        15
    ryd994  
       Jul 6, 2018 via Android
    你这个需求,我觉得可以直接往移动硬盘里压缩即可解决
    tar -C 了解一下
    omph
        16
    omph  
       Jul 6, 2018
    如果不考虑文件夹的情况,从大到小删
    ls -ilS | awk '{ if (size<10240000000){system("find -inum "$1" --delete"); size+=$6;}}'
    注:没测
    wobushizhangsan
        17
    wobushizhangsan  
       Jul 6, 2018 via Android
    打个响指
    cjpjxjx
        18
    cjpjxjx  
       Jul 6, 2018
    SFTP,选择一个容量分布比较随机的方式排序,选择 1/4 的内容,删除,误差应该不会很大
    pWHx3x96
        19
    pWHx3x96  
       Jul 6, 2018
    @pynix
    @wobushizhangsan
    可以的,脚本一跑,硬盘上一半的小视频没了
    flynaj
        20
    flynaj  
       Jul 6, 2018 via Android
    rm -rf *
    param
        21
    param  
       Jul 6, 2018 via Android
    用 baobab 吧
    找找有没有 node_modules
    zzj0311
        22
    zzj0311  
       Jul 6, 2018 via Android
    rm -rf 等两秒 ctrl+c
    awhane
        23
    awhane  
       Jul 7, 2018
    find 是正解。pipe+xargs 当心把你系统清盘了
    rootit
        24
    rootit  
       Jul 7, 2018
    22 楼正解, 删一下,看下剩余量即可。不关心内容,哪有那么复杂。
    rootit
        25
    rootit  
       Jul 7, 2018
    为什么有个 [中共] 的标签。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5177 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 09:08 · PVG 17:08 · LAX 02:08 · JFK 05:08
    ♥ Do have faith in what you're doing.