目录相关操作

在目录中移动

chdir '/etc' or die  "cannot chdir to /etc: $!";

如果调用chdir时不加参数,Perl将尝试将工作目录设置成主目录。

 

文件名通配

my @all_files = glob '*';
my @pm_files  = glob '*.pm';

如果一次匹配多种模式,可以在参数中用空格隔开各个模式

my @all_files_including_dot = glob '.* *' ;

在glob操作符之前,程序都是通过使用尖括号语法来调用此功能,看起来和读取文件句柄差不多:

my @all_files = <*> ; # 效果和这样的写法完全一致: my @all_files = glob '*';

Perl 会把尖括号出现的变量替换成它的值,类似于双引号变量的内插。

 

目录句柄

要特别注意.和..也在其中,因此,如果我们只想处理名称以pm结尾的文件,则可以在循环使用跳过这个函数:

while ( $name = readdir $dh) {
    next unless $name =~ /^\./ ;
   .... 
}

 

文件和目录的操作

删除文件

在Perl里面,我们可以使用unlink操作符,并指定要删除的文件列表:

unlink 'slate','bedrock','lava';
unlink  qw(slate bedrock lava);

unlink 参数是一个列表, glob 函数提供的正好是一个列表,因此可以一次性删除多个文件

unlink glob '*.o";

unlink的返回值代表成功删除的文件数目。

 

重命名文件

rename ‘old’,’new’;

 

链接与文件

建硬链接

link "chicken","egg" or warn "cann't link chicken to egg: $!";

创建一个软链接

sysmlink "dodgson" , "carroll" or warn "cann't symlink dodgson to carroll: $!";

要取得符号链接指向的位置,请使用readlink 函数,参数不是符号链接时返回undef

my $where = readlink "carroll";
my $perl  = readlink "/usr/local/bin/perl";

两种链接都可以使用unlink 移除

 

创建和删除目录

 

创建目录通过调用mkdir函数即可:

 

mkdir 'fred',0755 or warn "cannot make fred directory: $!":

0755 八进制的数表示初始权限。

rmdir 移除空目录

my $temp_dir = "/temp/scratch_$$";  # $$ 由进程操作符决定
print "name:$temp_dir\n";

mkdir $temp_dir,0700 or die "cannot create $temp_dir: $!";

unlink glob "$temp_dir/* $temp_dir/.*";
rmdir $temp_dir;

如果临时目录里创建子目录,那么unlink操作会失败,rmdir也会跟着失败。
请参考Perl自带的File::Path 模块,里面的rmtree函数提供了完整的解决方案。

 

修改权限

 

chmod 755,'fred','barney'


chmod会返回成功更改的条目数量

修改隶属关系

chown函数修改一系列文件的拥有者以及所属组

my $user = 1004;
my $group = 100;
chown $use,$group,glob '*.o';

可以使用getpwnam函数将用户名转换成用户编号,再用相应的getgrnam 函数把用户组转换成编号:

defined(my $user = getpwnam 'merlyn' ) or die 'bad user';
defined(my $group = getgrnam 'users') or die 'bad group';
chown $suer,$group,glob '/home/merlyn/*';

修改时间戳


修改文件最近更改或访问时间,我们可以使用utime函数来更改。

my $now = time ;
my $ago = $now - 24*60*60 ; # 一天的秒数
utime $now,$ago,glob '*';
posted @ 2013-09-27 08:57  新闻官  阅读(294)  评论(0编辑  收藏  举报