linux删除所有子目录下的指定文件夹
例如当前目录下有名字为123的三个文件夹,三个文件夹下面都有名字为4的一个文件夹,用一条命令删除文件夹4我记得以前看过,好像是用find命令先找出4,然后用rm-rf把找...
例如当前目录下有名字为1 2 3的三个文件夹,三个文件夹下面都有名字为4的一个文件夹,用一条命令删除文件夹4
我记得以前看过,好像是用find命令先找出4,然后用rm -rf把找到的结果全部删掉,但是具体是怎么写的记不清了,求大神指点啊... 展开
我记得以前看过,好像是用find命令先找出4,然后用rm -rf把找到的结果全部删掉,但是具体是怎么写的记不清了,求大神指点啊... 展开
2个回答
展开全部
linux删除所有子目录下的指定文件夹可采用find +exec组合来完成,如:
find ./ -type d -name "del_dir" -exec rm -r {} \;
说明:
./ 为待查询的开始目录,从此目录开始搜索,包括本目录下的子目录
-type d 目标为文件夹
-name "del_dir" 指定待删除的目录名
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 {} \;
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 每次都重新查找一下当前目录都有哪些文件, 效率会很低下, 尤其是目录下有很多子目录或文件的情况下.
所以, 忽略报错就可以了.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询