• perl对目录的操作


    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 = <$dir/* $dir/.*>;

    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  <$temp_dir/* $temp_dir/.*>;
    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。

  • 相关阅读:
    ROS 接口调参 加载参数 动态参数 从NodeHandle中加载参数
    百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧
    【Leetcode】top 100 贪心算法
    聊聊logback的MDCFilter
    C++GUI之wxWidgets(2)-hello,world
    避免分库分表,绿普惠的分布式数据库选型与实践
    flutter开发实战-防抖Debounce与节流Throttler实现
    学习记忆——数学篇——案例——代数——函数——一元二次函数
    .Net Core后端架构实战【介入IOC控制反转】
    vue3 elementplus 多语言 i18n
  • 原文地址:https://blog.csdn.net/oligaga/article/details/127999210