linux删除所有子目录下的指定文件夹

例如当前目录下有名字为123的三个文件夹,三个文件夹下面都有名字为4的一个文件夹,用一条命令删除文件夹4我记得以前看过,好像是用find命令先找出4,然后用rm-rf把找... 例如当前目录下有名字为1 2 3的三个文件夹,三个文件夹下面都有名字为4的一个文件夹,用一条命令删除文件夹4
我记得以前看过,好像是用find命令先找出4,然后用rm -rf把找到的结果全部删掉,但是具体是怎么写的记不清了,求大神指点啊...
展开
 我来答
kaixingui2012
推荐于2017-09-23 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6447万
展开全部

linux删除所有子目录下的指定文件夹可采用find +exec组合来完成,如:

      find ./ -type d -name "del_dir" -exec rm -r {} \;

说明:

  1. ./  为待查询的开始目录,从此目录开始搜索,包括本目录下的子目录

  2. -type d 目标为文件夹

  3. -name "del_dir"   指定待删除的目录名

  4. rm -r {}   exec要执行的命令,此处为删除文件夹命令,如果很确定查到的目录一定要删除,则可加f不需要提示,如 rm -fr 

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-09-17
展开全部
本例中, 可以使用
rm -fr {1,2,3}/4

非要find 一下的话,

find 1/ 2/ 3/ -type d -name '4' -exec rm -fr {} \;
追问
我稍微变了下
find * -type d -name '.svn' -exec rm -fr {} \;
.svn是我要删除的文件夹名称
这条命令貌似是到所有子目录下去删除.svn文件夹啊,因为提示了很多find: `CI/tool/.svn': No such file or directory(我看了下,有.svn的被删除了,没有.svn的路径就会提示这句话,这是怎么回事啊?)
追答
1, 先说你这个find * 的用户可能存在的问题, 
* 不匹配当前目录, 所以你这个命令不会删除当前目录的下的.svn目录, 如果你不是刻意忽略当前目录的.svn目录, 可以使用find ./ , 有些版本的find不写 ./ 也可以, (Mac OS 经 下的find必须要写)

2, 假设目录结构如下

.
|-- 1/
| `-- 4/
|-- 2/
| `-- 4/
`-- 3/
`-- 4/

执行命令 find ./ -type d -name "4" -exec rm -fr {} \;
输出为:
find: ./1/4: No such file or directory
find: ./2/4: No such file or directory
find: ./3/4: No such file or directory

看一下本例中find的执行过程(非精确描述)

(1) find 先查找./ 下有哪些文件和目录, 发现存在 1/, 2/, 3/ 三个子目录, 没有其它文件

(2) 在./ 下查找名为4的目录, 本例中不存在./4/ 所以, 本步骤什么都没发生.

(3) 查找 1/ 下有哪些文件和目录, 本例中有一个目录 1/4/

(4) 在当前目录查找名为4的目录, 找到了, 然后执行 -exec 定义的动作, 即调用 rm -fr 将其删除
(5) 尝试查询 1/4/ 目录下有哪些文件和目录, 由于刚刚这个目录已经被删除了, 所以 find 此处会报错
(6) 针对 2/ 目录 进行(3) (4) (5) , 然后发生同样的事情.
(7) 针对 3/ 目录

问题就出在find 遍历目录的方式上, 如果find 每次都重新查找一下当前目录都有哪些文件, 效率会很低下, 尤其是目录下有很多子目录或文件的情况下.

所以, 忽略报错就可以了.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式