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

Linux 删除大文件的报错

  •  
  •   Ewig · 2019-01-03 01:04:16 +08:00 · 4993 次点击
    这是一个创建于 2143 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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.


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

    第二个问题。
    文件名开始的减号会被识别成参数,需要像一楼说的那样 xargs rm 后面加上 -- 把参数终结掉。
    Ewig
        6
    Ewig  
    OP
       2019-01-03 01:55:13 +08:00
    @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
    msg7086
        7
    msg7086  
       2019-01-03 01:58:53 +08:00
    @Ewig 改用 ls -1 试试。
    zealot0630
        8
    zealot0630  
       2019-01-03 01:59:54 +08:00
    rm "./文件名"
    zealot0630
        9
    zealot0630  
       2019-01-03 02:00:15 +08:00
    引号不能省略
    Ewig
        10
    Ewig  
    OP
       2019-01-03 02:58:31 +08:00
    @zealot0630 具体格式怎么写
    lcdtyph
        11
    lcdtyph  
       2019-01-03 03:06:50 +08:00 via iPhone
    find . -type f -delete
    leido
        12
    leido  
       2019-01-03 03:08:53 +08:00 via Android
    ls | xargs -i rm -rf {}
    再不行就 find 来删
    geelaw
        13
    geelaw  
       2019-01-03 03:25:38 +08:00
    一个简单的答案是直接删除 parent directory。

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

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

    find /web/ -name 'core*' | xargs rm -rf
    安全不?
    Ewig
        18
    Ewig  
    OP
       2019-01-03 09:46:59 +08:00
    @yanaraika 你这里的“ max-depth ”写啥
    Ewig
        19
    Ewig  
    OP
       2019-01-03 09:47:43 +08:00
    @ptyfork 没明白你这里的-depth 的意思
    yulgang
        20
    yulgang  
       2019-01-03 09:55:41 +08:00
    cd 到目标目录,cd 到目标目录,cd 到目标目录

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

    用 find 了就别再用管道又 xargs 了, 现在的 linux 系统 find 本身就支持 delete 参数,好用又清晰, 除非你在用上古时期的 linux
    RainySeason
        22
    RainySeason  
       2019-01-03 10:20:06 +08:00   ❤️ 1
    好巧,前两天刚看过王垠写的 unix 的缺陷
    http://blog.jobbole.com/25792/
    Ewig
        23
    Ewig  
    OP
       2019-01-03 10:21:52 +08:00
    @yulgang 这个我用过,有特殊字符
    Ewig
        24
    Ewig  
    OP
       2019-01-03 10:22:03 +08:00
    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.
    Ewig
        25
    Ewig  
    OP
       2019-01-03 10:23:04 +08:00
    @ptyfork find . -type f 1 -delete 我直接用这个即可?
    hongyexiaoqing
        26
    hongyexiaoqing  
       2019-01-03 10:29:23 +08:00
    新建一个空的文件夹 kong,然后执行 sudo rsync -r --delete kong/ {目标路径}
    ptyfork
        27
    ptyfork  
       2019-01-03 10:31:30 +08:00
    @Ewig

    find . -type f -delete
    Ewig
        28
    Ewig  
    OP
       2019-01-03 10:31:49 +08:00
    @yanaraika find . -type f -max-depth 1 -delete 你这里的-max-depth 写“ 1 ” ?那后面为啥跟一个 1
    yulgang
        29
    yulgang  
       2019-01-03 10:33:20 +08:00   ❤️ 1
    @Ewig

    处理包含特殊字符的文件

    cd 目标目录

    #列出文件 inode
    ls -il

    #根据 inode 删除对应文件
    find . -inum 上面列出的数字 -exec rm -i {} /;
    yulgang
        30
    yulgang  
       2019-01-03 10:35:52 +08:00
    末尾打错,改成

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

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

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

    rm -rf .


    ./* 的话文件一多就删不掉,报参数太长
    lieh222
        42
    lieh222  
       2019-01-03 16:35:34 +08:00
    在当前目录执行,for i in `ls`;do rm $i; done,这样可能比较慢,不着急可以这样删,看楼主还能发帖问明显是不着急
    Ewig
        43
    Ewig  
    OP
       2019-01-03 17:50:45 +08:00
    @zjsxwc 我的文件夹里面有很多重要软件,只能删除当下文件啦。谢谢
    rootit
        44
    rootit  
       2019-01-03 17:52:54 +08:00
    因为有特殊字符
    使用 rm -f *要删除的文件 用*(正则)替代特殊字符 试试
    记得要匹配到一个 小心删除其他的,先 ls *要删除的文件 看下是否匹配正确 然后再删除
    ofblyt
        45
    ofblyt  
       2019-03-01 10:49:04 +08:00
    这个帖子实在太危险了,看了这一贴,实操了几个命令,现在我在搜如何恢复删除文件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5915 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.