首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2EX  ›  Linux

Linux 删除大文件的报错

  •  
  •   Ewig · 45 天前 · 2410 次点击
    这是一个创建于 45 天前的主题,其中的信息可能已经有所发展或是发生改变。
    shenjianlin@newdev:~/pdf_file(spider)$ rm ./*
    -bash: /usr/bin/rm: Argument list too long
    shenjianlin@newdev:~/pdf_file(spider)$ ls |xargs rm
    xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
    rm: invalid option -- '1'
    Try 'rm ./-2018 年 5 月 PMI 点评:制造业总体呈' to remove the file ‘-2018 年 5 月 PMI 点评:制造业总体呈’.
    Try 'rm --help' for more information.


    请问如何处理这种
    44 回复  |  直到 2019-01-03 17:52:54 +08:00
        1
    66450146   45 天前
    xargs rm --
        2
    Ewig   45 天前
    @66450146 你这个什么意思,我只删除当下的文件,当下的文件夹不能删除
        3
    Ewig   45 天前
    shenjianlin@newdev:~/pdf_file(spider)$ ls |xargs -0 -l1 rm -f
    xargs: argument line too long
        4
    ptyfork   45 天前
    find . -type f -depth 1 -delete
        5
    msg7086   45 天前
    第一个问题。
    星号展开过长。你可以一次只删一部分文件。比如像 rm 2018* 这样只删除少量文件。

    第二个问题。
    文件名开始的减号会被识别成参数,需要像一楼说的那样 xargs rm 后面加上 -- 把参数终结掉。
        6
    Ewig   45 天前
    @msg7086 ls |xargs rm --
    rm: cannot remove ‘ Value ’: No such file or directory
    rm: cannot remove ‘ as ’: No such file or directory
    rm: cannot remove ‘ Revenue ’: No such file or directory
    rm: cannot remove ‘ Declines-17 页.pdf ’: No such file or directory
    rm: cannot remove ‘ A ’: No such file or directory
    rm: cannot remove ‘ Wright ’: No such file or directory
        7
    msg7086   45 天前
    @Ewig 改用 ls -1 试试。
        8
    zealot0630   45 天前
    rm "./文件名"
        9
    zealot0630   45 天前
    引号不能省略
        10
    Ewig   45 天前
    @zealot0630 具体格式怎么写
        11
    lcdtyph   45 天前 via iPhone
    find . -type f -delete
        12
    leido   45 天前 via Android
    ls | xargs -i rm -rf {}
    再不行就 find 来删
        13
    geelaw   45 天前
    一个简单的答案是直接删除 parent directory。

    论 shell globbing 的坏处。
        14
    congeec   45 天前
    标题误导人,不是删除大文件报错,是文件名不符合 Linux 命名惯例导致 rm 没法正确识别文件名
        15
    yanaraika   45 天前
    不要 ls 再 pipe,find . -type f -max-depth 1 -delete 是正确的
        16
    runAll   45 天前 via iPhone
    用 rsync,拿一个空目录和需要删除清空目录同步
    rsync --delete-before -a -H -v --progress --stats 空目录 待清空目录
        17
    luanluan   45 天前
    @leido
    @zealot0630
    @zealot0630
    @66450146

    web 目录下产生 100 多 G 的 core12121 到 core53341 ,有什么办法删除?

    find /web/ -name 'core*' | xargs rm -rf
    安全不?
        18
    Ewig   45 天前
    @yanaraika 你这里的“ max-depth ”写啥
        19
    Ewig   45 天前
    @ptyfork 没明白你这里的-depth 的意思
        20
    yulgang   45 天前
    cd 到目标目录,cd 到目标目录,cd 到目标目录

    #rm 列过长处理:
    find . -name "*" | xargs rm -rf '*'
        21
    ptyfork   45 天前
    @Ewig
    depth 表示遍历的深度,如果当前的目录下有子目录,子目录中还有子目录,那么 -depth 1 表示,只删除第一层的

    用 find 了就别再用管道又 xargs 了, 现在的 linux 系统 find 本身就支持 delete 参数,好用又清晰, 除非你在用上古时期的 linux
        22
    RainySeason   45 天前   ♥ 1
    好巧,前两天刚看过王垠写的 unix 的缺陷
    http://blog.jobbole.com/25792/
        23
    Ewig   45 天前
    @yulgang 这个我用过,有特殊字符
        24
    Ewig   45 天前
    shenjianlin@newdev:~/pdf_file(spider)$ find . -name "*" | xargs rm -f '*'
    xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
    rm: invalid option -- '5'
    Try 'rm --help' for more information.
        25
    Ewig   45 天前
    @ptyfork find . -type f 1 -delete 我直接用这个即可?
        26
    hongyexiaoqing   45 天前
    新建一个空的文件夹 kong,然后执行 sudo rsync -r --delete kong/ {目标路径}
        27
    ptyfork   45 天前
    @Ewig

    find . -type f -delete
        28
    Ewig   45 天前
    @yanaraika find . -type f -max-depth 1 -delete 你这里的-max-depth 写“ 1 ” ?那后面为啥跟一个 1
        29
    yulgang   45 天前   ♥ 1
    @Ewig

    处理包含特殊字符的文件

    cd 目标目录

    #列出文件 inode
    ls -il

    #根据 inode 删除对应文件
    find . -inum 上面列出的数字 -exec rm -i {} /;
        30
    yulgang   45 天前
    末尾打错,改成

    find . -inum 上面列出的数字 -exec rm -i {} \;

    按提示确认删除即可
        31
    sunnyadamm   45 天前
    @luanluan 在 web 目录执行 find . -name 'core*' -exec rm {} \;
        32
    cyspy   45 天前
    GNU 这套东西的设计是真的有些问题
        33
    luanluan   45 天前
    @cyspy
    @sunnyadamm
    @yulgang
    @yulgang 我在 linux 里 一个目录下有好几种文件, 我想查一个文件的总大小,怎么查啊? du -sh *2018* 直接就列出来了,怎么汇总大小呢
        34
    zou2699   45 天前 via iPhone
    使用 tab 补全会自动处理转义文件名的吧,直接就可以删除了吧。
        35
    des   45 天前 via Android
    @RainySeason
    照理说,powershell 就是一个好设计了
        36
    no1xsyzy   45 天前
    @des 本来应该是这样的,而且还有 Smalltalk 的一些感觉……
    "whatever,it might be,a line,from,csv" -split ","
    还有代码块,可以改变一段代码的变量绑定
    但是 PowerShell 的 REPL 实在是太垃圾了,尤其 print 出来的东西经常没有意义,另外就是隐式强类型……
    对于类型的反射求解机制也并不好( Python: dir, __dict__, hasattr ...)
    文档散乱
        37
    Ewig   44 天前
    @yulgang 我这有 10 万个,你让我一个个的列举出来,按照上面删?
        38
    sunnyadamm   44 天前   ♥ 1
    嗤嗤嗤,,,不多说了,block 了
        39
    yulgang   44 天前
    @luanluan

    du -s 你要的类型,然后 将第一列用 awk 求和。然后可以根据需要决定要不要转换成 KB、MB 还是 GB 显示。
        40
    maxio   44 天前
    xargs -n 1
        41
    zjsxwc   44 天前
    直接删掉当前目录好了

    rm -rf .


    ./* 的话文件一多就删不掉,报参数太长
        42
    lieh222   44 天前
    在当前目录执行,for i in `ls`;do rm $i; done,这样可能比较慢,不着急可以这样删,看楼主还能发帖问明显是不着急
        43
    Ewig   44 天前
    @zjsxwc 我的文件夹里面有很多重要软件,只能删除当下文件啦。谢谢
        44
    rootit   44 天前
    因为有特殊字符
    使用 rm -f *要删除的文件 用*(正则)替代特殊字符 试试
    记得要匹配到一个 小心删除其他的,先 ls *要删除的文件 看下是否匹配正确 然后再删除
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2141 人在线   最高记录 4346   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 05:53 · PVG 13:53 · LAX 21:53 · JFK 00:53
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1