免费注册 查看新帖 |

Chinaunix

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

[文件目录] 如何做到批量删除指定文件夹 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-06 11:38 |只看该作者 |倒序浏览
如何做到批量删除指定文件夹

目录结构如下
D:\tmp
├─AA
│  ├─cache
│  └─tmp
├─BB
│  ├─cache
│  └─tmp
├─CC
│  ├─cache
│  └─tmp
└─DD
    ├─cache
    └─tmp

现在想把除了BB目录以外,各一级子目录下的tmp、cache都删除


如果通过这样的命令
rm -rf /tmp/*/cache
rm -rf /tmp/*/tmp

可以做到把子目录下的tmp和cache都删除,但是我还需要保留某个文件夹下的tmp、cache
这个就不知道如何操作了

论坛徽章:
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
2 [报告]
发表于 2012-11-06 12:25 |只看该作者
  1. find /tmp/* -type d -name cache -o -name tmp | xargs rm -rf
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-11-06 12:33 |只看该作者
谢谢

那么怎么排除B目录呢

论坛徽章:
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
4 [报告]
发表于 2012-11-06 12:40 |只看该作者
回复 3# max5
  1. find /tmp/* -type d -name cache -o -name tmp | grep -v "/tmp/BB" | xargs rm -rf
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2012-11-06 13:08 |只看该作者
find -path './BB*' -prune  -o \( -name tmp -o -name cache \)  -exec rm -rf {} \;

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-16 06:20:00
6 [报告]
发表于 2012-11-06 13:15 |只看该作者
用个耍赖的方法,把你需要保留的文件夹都移走先,然后删除,再移回来,脚本也很短。而且没有复杂的语法。
假设temp文件夹下是这样的:
  1. [root@nathaniel temp]# tree
  2. .
  3. |-- AA
  4. |   |-- cache
  5. |   `-- temp
  6. |-- BB
  7. |   |-- cache
  8. |   `-- temp
  9. |-- CC
  10. |   |-- cache
  11. |   `-- temp
  12. |-- DD
  13. |   |-- cache
  14. |   `-- temp
  15. |-- EE
  16. |   |-- cache
  17. |   `-- temp
  18. `-- rmdir
复制代码
rmdir是脚本,内容如下:
  1. [root@nathaniel temp]# cat rmdir
  2. mv BB CC ..
  3. rm -fr *
  4. mv ../BB .
  5. mv ../CC .
复制代码
运行一下脚本的话,目录就只剩下BB和 CC了:
  1. [root@nathaniel temp]# tree
  2. .
  3. |-- BB
  4. |   |-- cache
  5. |   `-- temp
  6. `-- CC
  7.     |-- cache
  8.     `-- temp
复制代码

论坛徽章:
1
子鼠
日期:2014-05-04 13:59:31
7 [报告]
发表于 2012-11-06 14:50 |只看该作者
本帖最后由 修杰_JIANG 于 2012-11-08 13:51 编辑
  1. find /tmp/ |sed -r 's/(.*[^BB]\/\w)$/rm -rf \1/e'
复制代码

论坛徽章:
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
8 [报告]
发表于 2012-11-06 18:21 |只看该作者
  1. [root@TEST tmp]# tree
  2. .
  3. |-- AA
  4. |   |-- cache
  5. |   `-- tmp
  6. |-- BB
  7. |   |-- cache
  8. |   `-- tmp
  9. |-- CC
  10. |   |-- cache
  11. |   `-- tmp
  12. `-- DD
  13.     |-- cache
  14.     `-- tmp

  15. 12 directories, 0 files
  16. [root@TEST tmp]# find . -type d -regex '^[^BB]*' -mindepth 2|xargs rm -rf
  17. find: warning: you have specified the -mindepth option after a non-option argument -type, but options are not positional (-mindepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

  18. [root@TEST tmp]# tree
  19. .
  20. |-- AA
  21. |-- BB
  22. |   |-- cache
  23. |   `-- tmp
  24. |-- CC
  25. `-- DD

  26. 6 directories, 0 files

复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
9 [报告]
发表于 2012-11-06 19:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2012-11-06 20:07 |只看该作者
谢谢ls各位帮忙
我稍微改造了下 可以排除多个目录了,比如这个排除AA、BB、DD目录
find ./* -type d -name cache -o -name tmp | grep -v 'BB\|DD\|AA'| xargs rm -rf

人的需求总数慢慢膨胀的,我现在又在考虑怎么更方便的维护被排除的目录
当被排除的目录少量时候,这样写没问题,如果被排除的目录多到10个、20个,维护起来就不那么方便了。
我想把这个搞成一个sh,然后把被排除的目录放到一个变量里面。比如一行一条
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP