免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 906 | 回复: 0
打印 上一主题 下一主题

perl对目录的操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-03 00:20 |只看该作者 |倒序浏览
1,移动目录
chdir "/etc" or die "cannot chdir to /etc: $!";
如果不加路径参数,是将工作目录设置成主目录。
2,文件名模式匹配(glob)
取得目录下的文件,不包含以点号开头的字母,2个效果一样,写法不通,一般用第二种:
my @all_files = glob "*";
my @all_files = ;
取得目录下的以*.pm结尾的文件:
my @pm_files = glob "*.pm";
例子:
my $dir = "/home/aaa/aaa";
my @dir_files = ;
foreach my $file (@dir_files) {
    print "$file\n";
}
取得目录下的所有文件。
3,目录句柄操作
例子:
my $dir = "/home/aaa/aaa";
    opendir DH, $dir or die "Cannot open $dir: $!";
    foreach my $file (readdir DH) {
      next unless $file =~ /\.pm$/;        # 只想取得扩展名为pm的文件
      next if $file eq "." or $file eq "..";    # 排除点号(当前目录)和双点号(上层目录)2个目录
      next if $file =~ /^\./;            # 只想取得所有不以点号开头的文件
      print "$file\n";
    }
    closedir DH;
3,删除文件
例子:
unlink "slate", "bedrock", "lava";
unlink的返回值代表成功删除多少个文件
foreach my $file (qw(slate bedrock lava)) {
   unlink $file or warn "failed on $file: $!\n";
}
4,重命名文件
例子:
my $dir = "/home/aaa/aaa";
opendir DH, $dir or die "Cannot open $dir: $!";
    foreach my $file ( readdir DH ) {
        my $count;
        next unless $file =~ /\.old$/;
        my $newfile = $file;
        $newfile =~ s/\.old$/.new/;
        if ( -e $newfile ) {
            warn "can't rename $file to $newfile: $newfile exists\n";
        }
        elsif ( rename $file, $newfile ) {
            $count++;
        }
        else {
            warn "rename $file to $newfile failed: $!\n";
        }
        print "$count";
}
将结尾是.old的文件改成以.new结尾的文件,为降低覆盖文件的几率,加入了判断新文件是否存在的检测。
5,链接于文件
例子:
硬链接,
my $dir = "/home/aaa/aaa";
chdir "$dir" or die "cannot chdir to /etc: $!";
link "pm.old", "pm.new"
    or warn "can't link: $!";
软链接:
my $dir = "/home/aaa/aaa";
chdir "$dir" or die "cannot chdir to /etc: $!";
symlink "pm.old", "pm.back"
    or warn "can't link: $!";
删除链接文件:
my $dir = "/home/aaa/aaa";
chdir "$dir" or die "cannot chdir to /etc: $!";
unlink "pm.new", "pm.back"
   or warn "can't unlink: $!";
软连接和硬链接的区别就不废话了,linux下已经很熟悉了。
6,建立和删除目录
例子:
my $dir     = "/home/aaa/aaa";
my $temp_dir = 'test';
chdir "$dir" or die "cannot chdir to /etc: $!";
mkdir $temp_dir, 0700 or die "cannot create $temp_dir: $!";
unlink  ;
rmdir $temp_dir;
7,修改权限和更改隶属关系
例子:
my $dir = "/home/aaa/aaa";
opendir DH, $dir or die "Cannot open $dir_to_process: $!";
foreach my $file ( readdir DH ) {
        next unless $file =~ /\.old$/;
        chmod 0775, "$file";
        defined(my $user = getpwnam "sysadmin") or die "bad user";
        defined(my $group = getgrnam "sysadmin") or die "bad group";
        chown $user, $group, $file;
}
用getpwnam函数将名称转换为数值,这里我们用到了defined函数来确认返回值是不是undef,如果所指定的用户和组不存在,就会返回undef。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25264/showart_1676347.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP