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 来删除,可以先用 函数将目录里面的内容删除掉(如果含有子目录则无法将其删除):上面只能删除 hello 目录下的非目录文件。此时要用到的函数是 File::Path 模块中的 rmtree 函数了,该函数很简单,使用形如:rmtree ("hello"); |