曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4323|回复: 0
打印 上一主题 下一主题

mkdir -- 创建目录 | rmdir -- 删除空目录 | 删除非空目录方法

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-10-12 12:07:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mkdir 用来创建目录。

考虑下面代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

mkdir "temp", 0755 or warn "Cannot make temp directory: $!";

my $name = "hello";
my $permissions = "07555";
mkdir $name, oct($permissions);

#从命令行指定目录名字和权限
my ($comname, $perm) = @ARGV;
mkdir $comname, oct($perm) or die "Cannot create $comname: $!";


运行结果:
# ./opdir.pl world 0755

# ls -l |grep ^d
drwxr-xr-x 2 root root 4096 2011-10-12 10:59 hello
drwxr-xr-x 2 root root 4096 2011-10-12 10:59 temp
drwxr-xr-x 2 root root 4096 2011-10-12 10:59 world
在上面程序建立的 hello 这个目录时,使用了 oct 函数(字符串转八进制函数)对字符串 0755 进行了转换,而不能直接使用字符串 "0755" ,因为此时的 755 会当成十进制,然后转换为八进制而变成 01363 。

最后建立 world 目录是从命令行指定的,命令行中传进的权限值也要经过 oct 函数的转换。


删除空目录的函数是 rmdir,比如删除掉刚才建立的 temp 目录:
[code=perl]#!/usr/bin/perl


my ($deldir) = @ARGV;


rmdir $deldir or warn "cannnot delete specify directory: $!\n";[/mw_shl_code]
注意上面不能直接写成 $deldir = @ARGV,因为一个是标量,一个是数组,所以 $deldir 需要用括号括起来。这里使用一定要小心,如果你是在 root 用户,而忘记在命令行中指定目录的话,结果是相当悲剧的,因为此时 $deldir 的值为 0 。


另外,rmdir 每次只能删除一个目录,所以要删除多个,那么可以:
[Perl] 纯文本查看 复制代码
foreach my $dir (wq(temp, hello, world)) {
   rmdir $dir or warn "cannot rmdir $dir: $!\n";
}




如果目录里有文件,那么不能直接使用 rmdir 来删除,可以先用
unlink
函数将目录里面的内容删除掉(如果含有子目录则无法将其删除):
unlink glob "hello/*
上面只能删除 hello 目录下的非目录文件。此时要用到的函数是 File::Path 模块中的 rmtree 函数了,该函数很简单,使用形如:rmtree ("hello");
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 07:21 , Processed in 0.075900 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表