AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 45245
Accepted
Brent
Brent
Asked: 2009-07-25 07:58:30 +0800 CST2009-07-25 07:58:30 +0800 CST 2009-07-25 07:58:30 +0800 CST

当它报告“参数列表太长”时,如何从目录中删除所有文件

  • 772

我有一个目录,里面有几十万个文件。

我想删除所有文件,但 rm * -f 报告:“参数列表太长”

清除此目录的最佳方法是什么?

linux debian
  • 8 8 个回答
  • 4478 Views

8 个回答

  • Voted
  1. asdmin
    2009-07-25T09:52:04+08:002009-07-25T09:52:04+08:00
    寻找 。-maxdepth 1 -type f -exec rm -f {} \;
    

    它只需要太长时间(每个文件一个 rm 执行)。

    这个效率更高:

    寻找 。-maxdepth 1 -type f -print0 | xargs -r0 rm -f
    

    因为它需要尽可能多的文件名作为 rm 的参数,然后在下一次加载文件名时运行 rm ......可能会发生 rm 只被调用 2 或 3 次。

    • 21
  2. Best Answer
    skraggy
    2009-07-25T08:08:02+08:002009-07-25T08:08:02+08:00

    如果您无法删除目录,您可以随时使用 find。

    find . -maxdepth 1 -type f -exec rm -f {} \;
    

    这将删除当前目录中的所有文件,并且只删除当前目录(不是子目录)。

    • 11
  3. Coops
    2009-07-25T08:05:27+08:002009-07-25T08:05:27+08:00

    这两个都可以解决问题。这里对每种技术的各自性能进行了分析。

    find . -name WHATEVER -exec rm -rf {} \;
    

    或者

    ls WHATEVER | xargs rm -rf
    

    问题源于 bash 用目录中的每个项目扩展“*”。这两种解决方案都依次处理每个文件。

    • 6
  4. Brent
    2009-07-25T08:01:42+08:002009-07-25T08:01:42+08:00

    我可以通过备份一个级别来做到这一点:

    cd ..

    并运行:

    rm directory name -rf

    然后重新创建目录。

    • 3
  5. rixtertech
    2009-07-29T05:02:28+08:002009-07-29T05:02:28+08:00

    所有这些 find 调用都非常好,但是当我赶时间时,我很少记得确切所需的命名法:而是使用 ls。正如有人提到的, ls 。会工作,但我更喜欢 ls -1 如下:

    ls -1 | xargs -n 100 rm -rf

    -n xxx 数字非常安全,因为超过最大值将被自动更正(如果超过 size-max;请参阅 -s )或者如果超过应用程序的 args-max 它通常会相当明显的。

    应该注意,当您只想删除大目录中的文件子集并且出于任何原因不想使用 find 时,将 grep 插入此链的中间很方便。

    这个答案假设您正在为您的 ls、xargs 等使用 Gnu 核心实用程序。

    • 2
  6. Amandasaurus
    2009-07-29T00:30:22+08:002009-07-29T00:30:22+08:00

    您可以使用该-exec +选项来查找哪个会尝试运行 rm 尽可能少的次数,哪个可能会更快。

    find . -type f -exec rm '{}' +
    
    • 1
  7. Hubert Kario
    2012-04-27T08:15:56+08:002012-04-27T08:15:56+08:00

    这是在系统需要保持响应时删除大量文件的版本。

    它通过小批量发布工作(默认为 100 个文件)并等待其他工作完成来工作。

    从 ext3 上的单个目录中删除超过 50 万个文件非常出色。它打印完成的百分比作为一点奖励

    noOfFiles=`ls -U | wc -l`
    n=0
    while (ls -U | tail -n 100 | xargs rm -f); do 
       n=$((n+100));
       sync;
       echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
       sleep 5;
    done
    
    • 0
  8. kilcode
    2017-02-17T01:53:11+08:002017-02-17T01:53:11+08:00

    解决“参数太长”或“无法分配内存”错误

    这对会话文件夹中的220,000 多个文件起到了作用....

    优点:立即开始删除文件

    cd 路径/到/文件夹
    ls -f | xargs rm -f -v

    单击以获取正在删除的文件的屏幕截图- (在 ~ 15 分钟内删除了所有文件)

    -f (在 ls 之后)不进行预排序

    -v (在 rm 之后)将每个文件显示为被删除

    -f (在 rm 之后)强制通过,不提示写保护文件

    提示:首先重命名文件夹(前会话为 session_old)以防止在您尝试删除文件时添加其他自动生成的文件。如果它不像我的情况那样自动,您可以手动重新制作原始目录

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve