免费注册 查看新帖 |

Chinaunix

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

[学习分享] 关于find的特殊用法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-14 23:03 |只看该作者 |倒序浏览
# find / \( -path /root/backup_files -o -path /app \)  -prune -o -name "..*"     -print
/usr/share/man/man1/..1.gz

-prune 是表示被忽略,此命令如何分块详细解读?

论坛徽章:
0
2 [报告]
发表于 2012-11-15 12:53 |只看该作者
没朋友懂吗?

论坛徽章:
0
3 [报告]
发表于 2012-11-16 11:46 |只看该作者
一直自己顶

论坛徽章:
0
4 [报告]
发表于 2012-11-16 14:55 |只看该作者
1,-o: EXPR1 -o EXPR2 查找匹配EXPR1 或 EXPR2 的条目,-path /root/backup_files -o -path /app 就是匹配 路径中有/root/backup_files 或 /app的项目
2,-prune ,如果是目录的时候,查找到匹配项目是不进入该目录,也就是不再枚举该目录
3,-path ,匹配路径
4,-name,匹配文件
5,() 表示把括弧里的东西当成一个整体
意思是从根目录查找路径中有/root/backup_files或-path /app,文件名字是..*的并打印

论坛徽章:
0
5 [报告]
发表于 2012-11-16 15:35 |只看该作者
本帖最后由 du_liang 于 2012-11-16 15:36 编辑

回复 5# sky_sky888

我来分割一下
# find /                     \( -path /root/backup_files    -o      -path /app \)                -prune               -o           -name "..*"     -print


理解:
就 /下查询文件名是..*的文件并打印,但不在/root/backup_files   和 /app 下查询,我只是不明白 第1个-o为什么写中间, 第二个-o和谁匹配

是不这这样理解?

   

论坛徽章:
0
6 [报告]
发表于 2012-11-17 11:06 来自手机 |只看该作者
我建个文件测试下谢佳

论坛徽章:
0
7 [报告]
发表于 2012-11-19 15:32 |只看该作者
回复 5# sky_sky888


demo]# echo ''> dl/a.a
[root@www1 demo]# echo ''> dl2/b.b
[root@www1 demo]# find ./  -path ./dl -o -path ./dl2   -name "*.*"   -print
[root@www1 demo]# find ./  -path ./dl -o -path ./dl2   -name "*.*"   -print
[root@www1 demo]# find ./  -path ./dl -o -path ./dl2   -name "*.*"   -print
[root@www1 demo]# rm dl/a.a
rm: remove regular file `dl/a.a'? y
[root@www1 demo]# find ./  -path ./dl -o -path ./dl2   -name "*.*"   -print
[root@www1 demo]# find ./  -path ./dl -o -path ./dl2   -name "*.*"   -print
[root@www1 demo]# find ./  -path ./dl -o -path ./dl2   -name "*.*"   -print

我又这样写测试了下,为什么不打印呢


   

论坛徽章:
0
8 [报告]
发表于 2012-11-19 18:46 |只看该作者
  1. [root@localhost tmp]# ls ss
  2. a           routines.sh      VBoxGuestAdditions-amd64.tar.bz2
  3. deffiles    vboxadd          VBoxGuestAdditions-x86.tar.bz2
  4. do_dkms     vboxadd-service
  5. install.sh  vboxadd-x11
  6. [root@localhost tmp]# find . -path ./ss/def*
  7. ./ss/deffiles
  8. [root@localhost tmp]# find . -path ./ss
  9. ./ss
  10. [root@localhost tmp]# find . -path ./ss/def*  -o -path ./ss/do*
  11. ./ss/do_dkms
  12. ./ss/deffiles
  13. [root@localhost tmp]# find . -path ./ss/def*  -o -path ./ss/do* -name do\*
  14. ./ss/do_dkms
  15. ./ss/deffiles
  16. [root@localhost tmp]# find . \(-path ./ss/def*  -o -path ./ss/do*\) -name do\*
  17. ./ss/do_dkms
  18. ./ss/deffiles
  19. [root@localhost tmp]# find . \( -path ./ss/def*  -o -path ./ss/do* \) -o -name do\*
  20. ./ss/do_dkms
  21. ./ss/deffiles


复制代码

论坛徽章:
0
9 [报告]
发表于 2012-11-19 22:13 |只看该作者
回复 9# sky_sky888

接8楼,

我又试了下:
[root@demo demo]# find . -path ./dl/* -o -path ./dl2/* -name "*.*"
./dl2/b.b
./dl/a.a
[root@demo demo]# find . -path ./dl/* -o -path ./dl2/* -name "*"
./dl2/b.b
./dl/a.a

有结果

我查了man find:
expr1 -o expr2
              Or; expr2 is not evaluated if expr1 is true.

按上面的意思,-path ./dl/*应该是expr1,expr2则为 -path ./dl2/*,为什么expr1为真了,exp2还会显示?


   

论坛徽章:
0
10 [报告]
发表于 2012-11-20 12:26 |只看该作者
find . -path ./dl/* -o -path ./dl2/* -name "*.*" 的效果==find . -name "*.*"
因为两个-path之间是or的关系,后边的一个-name是又加上的选项。
find . -name "*"==find  你要知到wildcard * 有多强大啊,匹配所有的目录和文件啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP