rm命令好像有文件个数限制

发布于 2022-07-25 14:41:42 字数 1603 浏览 9 评论 6

这个小程序会生成一堆*.dat文件
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main()
{
        int     i;
        FILE    *fp;
        char    buff[1024];
        char    file_name[64];

        memset(buff, 0, 1024);
        for(i = 0; i < 10000; i++) {
                sprintf(file_name, "file%06d.dat", i);
                fp = fopen(file_name, "wb");
                if (NULL != fp) {
                        fwrite(buff, 1, 1024, fp);
                        fclose(fp);
                }
        }
        exit( 0 );
}

当文件超过一定数量后
在当前目录执行rm *.dat -f
报错: bash: /bin/rm: 参数列表过长
但是回到上一级目录却可以用rm -fr 来删除这个含有一堆小文件的目录
这到底是rm的问题还是bash的问题?

系统CentOS 4.3
64位一次删除5000个可以, 32位5000个都删不掉
rsync似乎利用了类似的方法读取文件列表, 同一目录下文件一多就失效

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

自由如风 2022-07-26 22:35:02

real    0m10.051s
user    0m1.620s
sys     0m2.490s

real    0m0.215s
user    0m0.030s
sys     0m0.000s

差别很大

他夏了夏天 2022-07-26 22:32:42

原帖由 aaronyou 于 2006-8-28 10:14 发表

  1. find . -name "*.dat" | xargs rm -f

复制代码

不懂为什么一定要用xargs
find 不是有exec参数吗?
find . -name "*.dat" -exec rm -f {} ;

两者效率差多了。

若是你要删除的文档有 1 万个,使用 -exec 需要呼叫 rm 一万次,而使用 xargs 却不需要这样多次。

这样吧,你自己测看看这些运作结果比较看看哪个快 :

  1. find /usr/bin -type f -exec ls -l {} ;

复制代码

  1. find /usr/bin -type f | xargs ls -l

复制代码

==

不再见 2022-07-26 21:59:43
  1. find . -name "*.dat" | xargs rm -f

复制代码

不懂为什么一定要用xargs
find 不是有exec参数吗?
find . -name "*.dat" -exec rm -f {} ;

世态炎凉 2022-07-26 21:47:35

http://bbs.chinaunix.net/viewthr ... p;extra=&page=1还是没有看懂xargs如何使用。。。

[ 本帖最后由 割鹿刀 于 2006-8-28 09:12 编辑 ]

孤云独去闲 2022-07-26 20:49:48

原帖由 safedead 于 2006-8-27 22:57 发表
當文件超過一定數量後
在當前目錄執行rm *.dat -f
報錯: bash: /bin/rm: 參數列表過長
但是回到上一級目錄卻可以用rm -fr 來刪除這個含有一堆小文件的目錄
這到底是rm的問題還是bash的問題?

  1. find . -name "*.dat" | xargs rm -f

复制代码

==

雄赳赳气昂昂 2022-07-26 17:47:57

man xargs

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文