linux下删除非空文件夹

软件和网站开发以及相关技术探讨
回复
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

linux下删除非空文件夹

#1

帖子 weihua2008 » 2008-12-08 19:16

linux的有删除文件夹的命令rmdir -rf*
但是我想用程序删除文件夹,同样提供了函数rmdir但是她只能删除空文件夹
我想删除非空文件夹,有没有好的想法
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: linux下删除非空文件夹

#2

帖子 HuntXu » 2008-12-08 22:21

rm就可以了
HUNT Unfortunately No Talent...
头像
32idea
帖子: 1251
注册时间: 2006-12-15 9:32
系统: linux

Re: linux下删除非空文件夹

#3

帖子 32idea » 2008-12-08 22:30

rm -rf ,后面空格跟路径名,慎用
xyywll
帖子: 338
注册时间: 2008-05-24 1:24

Re: linux下删除非空文件夹

#4

帖子 xyywll » 2008-12-08 22:51

人家问的是系统编程级呢,不是用命令,呵呵
我看了下 rm 的实现,用的应该是一个目录栈
lz 可以参考 coreutils 源代码里面的 rm.c
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
xyywll
帖子: 338
注册时间: 2008-05-24 1:24

Re: linux下删除非空文件夹

#5

帖子 xyywll » 2008-12-08 23:28

我的一个简单思路:
假设需要删除的目录为 a
1. 广度优先遍历将该目录开始的所有目录压栈
2. 对栈顶的目录,unlink 掉其所有记录(除 "." 和 "..")
3. rmdir 栈顶的目录
4. 出栈
5. 栈非空,则跳到 2;否则结束
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

Re: linux下删除非空文件夹

#6

帖子 xhy » 2008-12-09 0:07

建议参考busybox的源码

伪代码如下:

出错处理和.以及..目录的排除自己加

代码: 全选

rm_re(path)
{
    if (is_dir(path)) {
        dp = opendir(path);
        while ( (d=readdir(path)) != NULL ) {
            new_path = path + dp->d_name;
            rm_re(new_path);
            rmdir(new_path);
        }
    } else {
        unlink(path);
    }
}
目前负债150多万
xyywll
帖子: 338
注册时间: 2008-05-24 1:24

Re: linux下删除非空文件夹

#7

帖子 xyywll » 2008-12-09 0:17

xhy 兄递归的方法比较直观
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

Re: linux下删除非空文件夹

#8

帖子 weihua2008 » 2008-12-09 10:38

#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
if(rmdir("./ds/ee")!=0)
printf("删除目录失败\n");
return 0;
}
我的删除撒总是失败?
还有哥几个说的有道理,但是我不知道,你们对"非空"是如何理解的,假若在我的./ds/ee下没有文件夹了但是有一个文件撒办?
qq上有位仁兄说用system函数实现挺好,system("rm -rf ./ds/ee")
这样也是可以的system("rm -rf ./ds/ee/weihua.c");
c语言中有一个库函数remove似乎感觉挺好,是文件的话会调用unlink(),是目录的话会调用rmdir()函数。还没有整明白,
待续
xyywll
帖子: 338
注册时间: 2008-05-24 1:24

Re: linux下删除非空文件夹

#9

帖子 xyywll » 2008-12-09 11:18

rmdir 调用只能删除空目录
用 system 不叫自己写吧,呵呵,而且和原生的不一样吧,很多东西系统不提供的,system 也没用
非空就是 目录里面含有除 "." ".." 之外的记录

你可以看看系统编程里讲文件和目录的部分呀
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

Re: linux下删除非空文件夹

#10

帖子 weihua2008 » 2008-12-09 15:56

好的,我写的好像有点不地道,是吧?
用 system 不叫自己写吧,呵呵,而且和原生的不一样吧,很多东西系统不提供的,system 也没用
这话我有点不是很懂
1." 不叫自己写的吧"你是说我调用用了系统函数不是自己写的,不是自己的想法?
2."不是原生的",是我的删除路径的函数不是原生的还是system函数用的不是原生的?
3.system也没用哪?
删除路径跟删除文件夹不一样吗?若是空的话,直接删除,若不是空的话,将它清空再删除,
我再想想
codeprince
帖子: 1
注册时间: 2008-12-12 13:57

Re: linux下删除非空文件夹

#11

帖子 codeprince » 2008-12-12 14:06

rm -rf 文件名 man rm 一定行!
头像
yinhang8848
帖子: 97
注册时间: 2009-01-16 17:03
联系:

Re: linux下删除非空文件夹

#12

帖子 yinhang8848 » 2009-01-20 10:00

:em20 上面是C程序代码吗?
头像
lerosua
论坛版主
帖子: 8455
注册时间: 2007-11-29 9:41
联系:

Re: linux下删除非空文件夹

#13

帖子 lerosua » 2009-01-20 10:10

好多人没看明白楼主的问题就回答了
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: linux下删除非空文件夹

#14

帖子 poet » 2009-01-20 10:17

weihua2008 写了:linux的有删除文件夹的命令rmdir -rf*
但是我想用程序删除文件夹,同样提供了函数rmdir但是她只能删除空文件夹
我想删除非空文件夹,有没有好的想法
C程序只能通过写一个递归函数实现。

有很多其他的语言中有现成的实现。
头像
wuhezhong
帖子: 111
注册时间: 2010-04-03 18:10

Re: linux下删除非空文件夹

#15

帖子 wuhezhong » 2010-12-03 22:12

codeprince 写了:rm -rf 文件名 man rm 一定行!
偶认为正解,还是多用man和--help好处多多阿,原本用rmdir -p 递减删除来着,后来恼了,才知道非空目录的删除可以用rm -rf 删除,原来还以为rm只能删除文件呢。命令真的很强大阿。
我问佛:为何不给所有女子羞花闭月的容颜?
佛曰:那只是昙花的一现,用来蒙蔽世俗的眼
—————---/´ ¯/)
—————--/—-/
—————-/—-/
———--/´¯/'--'/´¯`•_
———-/'/--/—-/—--/¨¯\
——--('(———- ¯~/'--')
———\————-'—--/ 各类计算机在线书籍下载和在线浏览站点------->ppurl.com ------>首页下方有标签!
———-'\'————_-•´
————\———--(
回复