rm命令好像有文件个数限制
这个小程序会生成一堆*.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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
real 0m10.051s
user 0m1.620s
sys 0m2.490s
real 0m0.215s
user 0m0.030s
sys 0m0.000s
差别很大
两者效率差多了。
若是你要删除的文档有 1 万个,使用 -exec 需要呼叫 rm 一万次,而使用 xargs 却不需要这样多次。
这样吧,你自己测看看这些运作结果比较看看哪个快 :
复制代码
复制代码
==
复制代码
不懂为什么一定要用xargs
find 不是有exec参数吗?
find . -name "*.dat" -exec rm -f {} ;
http://bbs.chinaunix.net/viewthr ... p;extra=&page=1还是没有看懂xargs如何使用。。。
[ 本帖最后由 割鹿刀 于 2006-8-28 09:12 编辑 ]
复制代码
==
man xargs