免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 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
41 [报告]
发表于 2013-01-22 12:58 |只看该作者
回复 39# 代号:军刀


    不是一样吗?

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

黑哥,你这个太猛了:
   find . -mindepth 1 -regextype posix-egrep -type d -regex '\./[^/]*/a' -prune -o \( -type d ! -regex '\./[^/]*' -o -type f ! -regex '\./[^/]*/bin' \) -print

能否解释 下面2个命令的 思路 或者 总体思路??

1.   -mindepth 1 -regextype posix-egrep -type d -regex '\./[^/]*/a' -prune
2.   \( -type d ! -regex '\./[^/]*' -o -type f ! -regex '\./[^/]*/bin' \)

比如说
if 条件1 then
    -mindepth 1 -regextype posix-egrep -type d -regex '\./[^/]*/a' -prune   :这句话的意思是不是  最小路径为1级, 查找出 ./*/a 之外的 目录 ???
else
     if 条件2 then
          -type d ! -regex '\./[^/]*'              :这句话的意思是不是  查找出 ./*  所有的 文件或目录???
     else
          -type f ! -regex '\./[^/]*/bin'         :这句话的意思是不是  查找出 ./*/bin 文件 ???
endif


没弄明白思路。请指导。谢谢。

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
43 [报告]
发表于 2013-01-22 13:04 |只看该作者
回复 41# blackold
  1. [root@ usera]$ find ./*/* | grep -Evw '/a$|/a/|bin'   
  2. ./a1/1.dat
  3. ./a1/a
  4. ./a1/a/a.log
  5. ./a1/a/b
  6. ./a1/a.log
  7. ./a1/b
  8. ./a1/binabcd
  9. ./a2/2.dat
  10. ./a2/a
  11. ./a2/a.log
  12. ./a2/b
  13. ./a2/b/a
  14. ./a3/3.dat
  15. ./a3/a
  16. ./a3/a.log
  17. [root@ usera]$ find ./*/* | grep -Ev '/a$|/a/|\<bin\>'
  18. ./a1/1.dat
  19. ./a1/a.log
  20. ./a1/b
  21. ./a1/binabcd
  22. ./a2/2.dat
  23. ./a2/a.log
  24. ./a2/b
  25. ./a3/3.dat
  26. ./a3/a.log
复制代码

论坛徽章:
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
44 [报告]
发表于 2013-01-22 13:09 |只看该作者
回复 33# blackold


    没有动作自然就没问题了。看来还是 -o 连接与 and 连接的优先级的问题。这下算是明白了:
  1. # 单独的括号和没有括号是一样的效果,很好理解,不解释
  2. [seesea@UC ~]$ find user \( -type f -name a.log \) -o \( -type f -name 1.dat \) -exec echo {} \;
  3. user/c/1.dat
  4. user/b/1.dat
  5. user/a/1.dat

  6. # 整个括号将 expr1 和 expr2 的或操作优先结合,结果正确
  7. [seesea@UC ~]$ find user \( -type f -name a.log -o -type f -name 1.dat \) -exec echo {} \;                 
  8. user/c/1.dat
  9. user/c/a.log
  10. user/b/1.dat
  11. user/b/a.log
  12. user/a/1.dat
  13. user/a/a.log

  14. # 两边都使用 -exec,相当于数学里的分配率,把上一个外面的 -exec 分配到里面了,结果正确
  15. [seesea@UC ~]$ find user -type f -name a.log -exec echo {} \; -o -type f -name 1.dat -exec echo {} \;
  16. user/c/1.dat
  17. user/c/a.log
  18. user/b/1.dat
  19. user/b/a.log
  20. user/a/1.dat
  21. user/a/a.log
复制代码

论坛徽章:
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
45 [报告]
发表于 2013-01-22 13:15 |只看该作者
本帖最后由 yestreenstars 于 2013-01-22 13:20 编辑

@代号:军刀@blackold@Shell_HAT现在应该没问题了:
  1. find ./*/* | grep -Ev '^\./[^/]*/a$|^\./[^/]*/a/|^\./[^/]*/bin$' | xargs rm -rf
复制代码

论坛徽章:
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
46 [报告]
发表于 2013-01-22 13:18 |只看该作者
回复 43# 代号:军刀


    哦,明白。

    我理解为 -w 'bin' 与 '\<bin\>' 的区别了。

论坛徽章:
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
47 [报告]
发表于 2013-01-22 13:19 |只看该作者
回复 42# weichanghe2000


-mindepth 1 这是命令选项,不是属于表达式。

-regextype posix-egrep 为表达式选项,影响后面的所有测试。

if 条件1:-type d -regex '\./[^/]*/a' then  # 如果是一级目录下面的 a 目录
   
     -prune   # 则略过
else
     if 条件2:-type d ! -regex '\./[^/]*'  # 不是一级目录的目录
     或
      -type f ! -regex '\./[^/]*/bin'   # 不是一级目录下的 bin 文件的文件
      then
          # 则输出或删除。
endif





   

论坛徽章:
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
48 [报告]
发表于 2013-01-22 13:22 |只看该作者
回复 45# yestreenstars


    应该没有什么大问题了,两个^^应该是误写。


   ./normalfile 这个要不要删除?这要问LZ了。

论坛徽章:
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
49 [报告]
发表于 2013-01-22 13:23 |只看该作者
回复 45# yestreenstars


    嗯,如果存在a文件或bin目录呢?

论坛徽章:
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
50 [报告]
发表于 2013-01-22 13:51 |只看该作者
回复 44# seesea2517


    好,学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP