免费注册 查看新帖 |

Chinaunix

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

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

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


是的。
一级目录ab1、ca2、gm3....目录不能删除,
然后 它下面的 所有文件或目录,只保留 bin 和 a目录。
其他统统删掉

论坛徽章:
0
12 [报告]
发表于 2013-01-22 09:48 |只看该作者
  1. [root@test werwer]# find . -name *.bin -exec ls {} \; |awk -F '/' '{print $1"/"$2}'|sed "s:^.:`pwd`:"
  2. /root/werwer/a3
  3. /root/werwer/a4
  4. /root/werwer/a5
  5. /root/werwer/a2
  6. /root/werwer/a1
复制代码
AWK不太熟悉,才刚学, 我的想法是:  上面这个命令得到了 bin 这个级别的当前路径,

然后用AWK 循环, 在AWK中 使用SHELL命令来删除 ,这样应该可以

论坛徽章:
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
13 [报告]
发表于 2013-01-22 10:07 |只看该作者
若如楼上所说,则把5楼的 a* 改为 * 就行了:
  1. [seesea@UC ~]$ tree user
  2. user
  3. |-- a
  4. |   |-- 1.dat
  5. |   |-- a
  6. |   |-- a.log
  7. |   `-- bin
  8. |-- b
  9. |   |-- 1.dat
  10. |   |-- a
  11. |   |-- a.log
  12. |   `-- bin
  13. `-- c
  14.     |-- 1.dat
  15.     |-- a
  16.     |-- a.log
  17.     `-- bin

  18. 6 directories, 9 files
  19. [seesea@UC ~]$ find user/*/* -type d ! -name a -o -type f ! -name bin  -exec echo {} \;                 
  20. user/a/1.dat
  21. user/a/a.log
  22. user/b/1.dat
  23. user/b/a.log
  24. user/c/1.dat
  25. user/c/a.log
  26. [seesea@UC ~]$ find user/*/* -type d ! -name a -o -type f ! -name bin  -exec rm -rf {} \;   
  27. [seesea@UC ~]$ tree user
  28. user
  29. |-- a
  30. |   |-- a
  31. |   `-- bin
  32. |-- b
  33. |   |-- a
  34. |   `-- bin
  35. `-- c
  36.     |-- a
  37.     `-- bin
复制代码

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


    多谢大侠的鼎力相助。

顺便问一下:find user/*/* -type d ! -name a -o -type f ! -name bin  -exec echo {} \;        

我查过帮助文档: expr1 -o expr2的说明:

expr2 is not evaluated if expr1 is true。

我有点纳闷了:上述命令 find user/*/* -type d ! -name a 找出了 不是 a 的目录
(相当于  或运算左值expr1为真, 应该不去 评估右值 expr2命令了: -type f ! -name bin  -exec echo {} \;   )

那 右值 expr2中 -type f ! -name bin  -exec echo {} \;  是  何时 起到 作用呢???

论坛徽章:
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
15 [报告]
发表于 2013-01-22 11:01 |只看该作者
@seesea2517
@yestreenstars
我那find命令即使是改后还是有bug的,对于文件来说没有问题,目录的话有问题,这个问题目前我还不知怎么处理
  1. [root@ usera]$ find ../usera/* -maxdepth 1 -type d ! -name a
  2. ../usera/a1
  3. ../usera/a1/b
  4. ../usera/a2
  5. ../usera/a3
复制代码
不知find有什么参数可以过滤掉
  1. ../usera/a1
  2. ../usera/a2
  3. ../usera/a3
复制代码

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
16 [报告]
发表于 2013-01-22 11:03 |只看该作者
没有标准问题,就没有标准答案。。。。。。反正方法就是用!排除掉想保留的,剩下的就统统都是不想要的了

论坛徽章:
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
17 [报告]
发表于 2013-01-22 11:09 |只看该作者
本帖最后由 blackold 于 2013-01-22 11:59 编辑

回复 11# weichanghe2000


    try:
  1. find . -mindepth 1 -regextype posix-egrep -type d -regex '\./[^/]*/a' -prune -o \( -type d ! -regex '\./[^/]*' -o -type f ! -regex '\./[^/]*/bin' \) -print
复制代码

论坛徽章:
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
18 [报告]
发表于 2013-01-22 11:16 |只看该作者
@dn833@代号:军刀你们可以看一下我的那个有没有Bug?

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


    其实有的时候用find是很冒险的,跟你分享个我曾经遇到过的问题吧,有a和b两个目录,目录结构是相同的,子目录有很多层,每一层子目录下都有一个隐藏文件.svn,现在需要做的就是,把b中所有文件和子目录中除了隐藏文件.svn,其他的根据目录结构覆盖掉a目录下相同结构的文件和子目录,当时我的第一想法就是用find搜索并排除掉.svn,当时就差点酿成大错,现在我用find我基本都是用来查找文件,而真正用到目录结构的移动和删除之类的我有后惧症了

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
20 [报告]
发表于 2013-01-22 11:23 |只看该作者
回复 19# 代号:军刀


    我每次都是find出个结果,先xargs ls -l看看再做定夺~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP