免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: weichanghe2000
打印 上一主题 下一主题

[文件目录] 如何做这样的一个查找和删除操作 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
51 [报告]
发表于 2013-01-22 14:03 |只看该作者
回复 48# blackold


    我懂你的意思,但我以为LZ给出的每个目录下都有子目录a和bin文件,既然有它们的存在,就不会有同名的文件a和目录bin的存在。另外,./normalfile这个是什么意思?

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
52 [报告]
发表于 2013-01-22 14:03 |只看该作者
blackold 发表于 2013-01-22 13:19
回复 42# weichanghe2000

blackold还真是诲人不倦啊……要是我,就打 --help 了。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
53 [报告]
发表于 2013-01-22 14:43 |只看该作者
回复 51# yestreenstars


    如果 a 和 bin 都存在,就没有这个问题。

    ./normalfile 是指 user目录下的普通文件(非目录文件)。

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
54 [报告]
发表于 2013-01-22 14:58 |只看该作者
回复 52# seesea2517


呵呵,大侠们 我需要 跟 你们 学习。

请不吝赐教。

大侠们都很热心,都很热情,在此表示衷心的感谢。

上面所有的命令,我都会 每条来执行一遍,学习下 其中的精髓,这代表了大家 的劳动、和成果。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
55 [报告]
发表于 2013-01-22 15:00 |只看该作者
回复 54# weichanghe2000


    你这个帖子挺好的,大家都能学到东西。

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
56 [报告]
发表于 2013-01-22 20:21 |只看该作者
本帖最后由 weichanghe2000 于 2013-01-22 21:42 编辑

回复 44# seesea2517

正如在 http://bbs.chinaunix.net/forum.p ... ;page=5#pid23767279 中提到的:

假设目录结构是你之前说的
  1. user
  2. |-- a
  3. |   |-- 1.dat
  4. |   |-- a
  5. |   |-- a.log
  6. |   `-- bin
  7. |-- b
  8. |   |-- 1.dat
  9. |   |-- a
  10. |   |-- a.log
  11. |   `-- bin
  12. `-- c
  13.     |-- 1.dat
  14.     |-- a
  15.     |-- a.log
  16.     `-- bin
复制代码
cd  user ->

下面是 -exec 只作用于 expr2的情形:
-o:
find . -type f ! -name a.log -o -type f ! -name 1.dat -exec echo {} \;命令返回为
./a2/a.log
./a3/a.log
./a1/a.log

find . -type f ! -name a.log -o -type f -name 1.dat -exec echo {} \;返回为空值

find . -type f  -name a.log -o -type f ! -name 1.dat -exec echo {} \;返回为
./a2/bin
./a3/bin
./a1/bin

find . -type f  -name a.log -o -type f  -name 1.dat -exec echo {} \;返回为
./a2/1.dat
./a3/1.dat
./a1/1.dat

-a:
find . -type f ! -name a.log -a -type f ! -name 1.dat -exec echo {} \;返回为
./a2/bin
./a3/bin
./a1/bin

find . -type f ! -name a.log -a -type f -name 1.dat -exec echo {} \;返回为
./a2/1.dat
./a3/1.dat
./a1/1.dat

find . -type f  -name a.log -a -type f ! -name 1.dat -exec echo {} \;返回为
./a2/a.log
./a3/a.log
./a1/a.log

find . -type f  -name a.log -a -type f  -name 1.dat -exec echo {} \;返回为空值




#############################
#############################

下面是 -exec 作用于 expr1 和 expr2 的情形:
-o:
find . \( -type f ! -name a.log -o -type f ! -name 1.dat \) -exec echo {} \;命令返回为
./a2/1.dat
./a2/a.log
./a2/bin
./a3/1.dat
./a3/a.log
./a3/bin
./a1/1.dat
./a1/a.log
./a1/bin


find . \( -type f ! -name a.log -o -type f -name 1.dat \) -exec echo {} \;返回为
./a2/1.dat
./a2/bin
./a3/1.dat
./a3/bin
./a1/1.dat
./a1/bin


find . \( -type f  -name a.log -o -type f ! -name 1.dat \) -exec echo {} \;返回为
./a2/a.log
./a2/bin
./a3/a.log
./a3/bin
./a1/a.log
./a1/bin

find . \( -type f  -name a.log -o -type f  -name 1.dat \) -exec echo {} \;返回为
./a2/1.dat
./a2/a.log
./a3/1.dat
./a3/a.log
./a1/1.dat
./a1/a.log


-a:
find . \( -type f ! -name a.log -a -type f ! -name 1.dat \)  -exec echo {} \;返回为
./a2/bin
./a3/bin
./a1/bin

find . \( -type f ! -name a.log -a -type f -name 1.dat \) -exec echo {} \;返回为
./a2/1.dat
./a3/1.dat
./a1/1.dat

find . \( -type f  -name a.log -a -type f ! -name 1.dat \) -exec echo {} \;返回为
./a2/a.log
./a3/a.log
./a1/a.log

find . \( -type f  -name a.log -a -type f  -name 1.dat \) -exec echo {} \;返回为空值


经过这一系列的演算,现在感觉好多了。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
57 [报告]
发表于 2013-01-22 21:18 |只看该作者
回复 56# weichanghe2000


    本质就是表达式的求值。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
58 [报告]
发表于 2013-01-23 07:13 |只看该作者
回复 56# weichanghe2000


    牛! 学习!

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
59 [报告]
发表于 2013-01-23 09:07 |只看该作者
回复 56# weichanghe2000


    嗯,这个真是百科全书了,学习学习。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
60 [报告]
发表于 2013-02-27 21:53 |只看该作者
本帖最后由 cao627 于 2013-02-27 22:25 编辑

find . -type f ! -name a.log -o -type f ! -name 1.dat -exec echo {} \;命令返回为
./a2/a.log
./a3/a.log
./a1/a.log

a.log进入find的视线 , ! -name a.log “配”a.log失败, 执行 -o后的语句   ! -name 1.dat , “配”a.log成功 ,a.log 被exec传给 {}, 被echo。
当1.date进入find的视线,! -name a.log “配”1.date成功    -o后的语句都不被执行。没有输出(严格说来如果没有-exec语句的话,1.date是被“看不见的print”打印的,但-exec代替了find的"看不见的print",所以当-exec没有被执行,1.date也就“丢失”了,我是这么想的)
bin同1.date。
于是整个输出就只有 a.log


56楼列举的其他的一些命令都可按类似如上分析来解释执行结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP