免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2663 | 回复: 7
打印 上一主题 下一主题

find: stat() error [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-04 11:16 |只看该作者 |倒序浏览
今天碰到一个问题,有点不明白,在此请教一下。

find命令在什么情况下会报如下error
find: stat() error /home/aaa/test_file: No such file or directory

系统是SunOS 5.10

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2012-05-04 11:22 |只看该作者
函数stat()是获取文件的统计信息,原型是
  1. int stat(const char *path, struct stat *buf);
复制代码
文件原来有,在find执行过程当中删除了,path不对了,所以就可能报那个错误了。
猜测而已。

论坛徽章:
0
3 [报告]
发表于 2012-05-04 11:42 |只看该作者
回复 2# L_kernel


    有点明白了,想请教下。假如在$HOME目录下,我有如下文件:
file1
file2
file3
然后我有同时跑下面两个find命令:
find $HOME/. -name 'file*' |xargs rm -f
find $HOME/. -name 'file*'

第二个find命令会不会出现 find: stat() error file2:NO such file or directory 的错误

论坛徽章:
0
4 [报告]
发表于 2012-05-04 12:34 |只看该作者
这个可以自己试试哈:wink:

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2012-05-04 12:34 |只看该作者
alex_icetea 发表于 2012-05-04 11:42
回复 2# L_kernel
find $HOME/. -name 'file*' |xargs rm -f
不会,因为上个命令已经把file1,file2,file3都处理完了。不在存储介质当中。
后面的那个命令读取目录下的所有文件,并没有发现匹配的。

如果执行第一个命令的同时,注意是同时,有另一个操作把file1,file2,file3删除了,就可能了。

这是一个并发的问题。在OS的底层经常考虑到,同时在多线程的应用当中也经常考虑到。

针对这种命令行操作上的并发,好像用文件锁的方法可以解决。

论坛徽章:
0
6 [报告]
发表于 2012-05-04 13:43 |只看该作者
本帖最后由 alex_icetea 于 2012-05-04 14:44 编辑

回复 5# L_kernel


    谢谢, 刚刚我做了下test。确实如你说的一样,但仍有一点不明白,请看下我的test。

有如下文件
$ ls
epn_click.bucket.20120503.1.17192.dat    epn_click.bucket.20120503.3.17193.dat    epn_click.bucket.20120503.4.17193.dat
epn_click.bucket.20120503.10.17195.dat   epn_click.bucket.20120503.30.17201.dat   epn_click.bucket.20120503.40.17205.dat
epn_click.bucket.20120503.11.17195.dat   epn_click.bucket.20120503.30.17202.dat   epn_click.bucket.20120503.41.17205.dat
epn_click.bucket.20120503.12.17195.dat   epn_click.bucket.20120503.31.17202.dat   epn_click.bucket.20120503.42.17205.dat
epn_click.bucket.20120503.12.17196.dat   epn_click.bucket.20120503.32.17202.dat   epn_click.bucket.20120503.5.17193.dat
epn_click.bucket.20120503.13.17196.dat   epn_click.bucket.20120503.33.17202.dat   epn_click.bucket.20120503.6.17193.dat
epn_click.bucket.20120503.14.17196.dat   epn_click.bucket.20120503.34.17202.dat   epn_click.bucket.20120503.6.17194.dat
epn_click.bucket.20120503.15.17196.dat   epn_click.bucket.20120503.34.17203.dat   epn_click.bucket.20120503.7.17194.dat
epn_click.bucket.20120503.15.17197.dat   epn_click.bucket.20120503.35.17203.dat   epn_click.bucket.20120503.8.17194.dat
epn_click.bucket.20120503.16.17197.dat   epn_click.bucket.20120503.36.17203.dat   epn_click.bucket.20120503.9.17194.dat
epn_click.bucket.20120503.17.17197.dat   epn_click.bucket.20120503.36.17204.dat   epn_click.bucket.20120503.9.17195.dat
epn_click.bucket.20120503.18.17197.dat   epn_click.bucket.20120503.37.17204.dat   test_file1
epn_click.bucket.20120503.18.17198.dat   epn_click.bucket.20120503.38.17204.dat   test_file2
epn_click.bucket.20120503.19.17198.dat   epn_click.bucket.20120503.39.17204.dat   test_file3
epn_click.bucket.20120503.3.17192.dat    epn_click.bucket.20120503.39.17205.dat

在其中一个session上跑:
$ find . -name 'epn_click.bucket.20120503.2*' |xargs rm -f

在另外一个session上跑:
$ find . -name 'epn_click.bucket.20120503.3*' -exec basename {} \;
epn_click.bucket.20120503.30.17201.dat
epn_click.bucket.20120503.30.17202.dat
epn_click.bucket.20120503.3.17193.dat
epn_click.bucket.20120503.33.17202.dat
epn_click.bucket.20120503.32.17202.dat
epn_click.bucket.20120503.31.17202.dat
epn_click.bucket.20120503.34.17203.dat
epn_click.bucket.20120503.34.17202.dat
epn_click.bucket.20120503.36.17203.dat
epn_click.bucket.20120503.35.17203.dat
epn_click.bucket.20120503.36.17204.dat
epn_click.bucket.20120503.38.17204.dat
epn_click.bucket.20120503.37.17204.dat
epn_click.bucket.20120503.39.17204.dat
epn_click.bucket.20120503.39.17205.dat
find: stat() error ./epn_click.bucket.20120503.28.17201.dat: No such file or directory
epn_click.bucket.20120503.3.17192.dat

就有find: stat() error错误, 不明白的是, 我两个命令的匹配文件名不一样,为什么也会报错?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-05-04 14:44 |只看该作者
应该还有第三个程序在做删除。

论坛徽章:
0
8 [报告]
发表于 2012-05-04 14:59 |只看该作者
回复 7# rdcwayx


    第一个session的命令就是做的delete. 但我不明白的是第二个session命令的file name pattern都不一样,为什么也会报错, 求解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP