22. Perl 文件操作-文件夹遍历

    xiaoxiao2022-07-04  210

    虽然Perl 语言对目录的常见操作也提供了一组API, 如rename, rmdir, unlink 等函, 但是笔者认为并没有太大必要去花时间掌握这些函数, 因为perl 通过system 函数可以直接执行系统命令, 所以直接使用system+原生linux文件操作命令即可, 这样可以少学一套API. 因此, 笔者更常用于此种方式.

    1. 获取目录下文件列表

    Perl 语言获取文件列表是通过砖石操作符, 支持shell的通配符:

    文件名支持shell通配符, 如: *, ?, [] 等砖石操作符返回的是文件的绝对路径名称语法: @files = <$dir/*> ;

    1.1 获取目录下所有文件

    @files = <$dir/*>;

    1.2 获取目录下所有脚本文件

    @files = <$dir/*.*>;

    2 递归文件夹

    在做服务器文件管理时,递归文件夹是一个很常见的操作. perl 的递归方式非常简单.

    2.1 普通方式

    #!/usr/bin/perl #Desc 遍历文件夹下所有文件 #Auth zongf #Date 2019-05-20 #递归函数 sub recure{ #获取传入参数:文件名 my $file = shift @_; #判断文件是否是目录 if( -d $file ){ #文件是目录, 则文件夹数量+1 $cnt_dir++; #获取文件夹下所有文件 my @sub_files = <$file/*>; #遍历所有文件, 递归方法 foreach my $sub_file (@sub_files ){ &recure($sub_file); } }else { #如果文件是普通文件,则文件数量+1 $cnt_file++; } } $dir = "/home/admin/blog"; &recure($dir); print "files:$cnt_file, dirs:$cnt_dir\n";

    2.2 极简方式

    简化模式,主要精简的是获取目录下的文件列表步骤. 这样写出的代码会更简洁!

    #!/usr/bin/perl #Desc 遍历文件夹下所有文件 #Auth zongf #Date 2019-05-20 #递归函数 sub recure{ #获取传入参数:文件名 my $file = shift @_; #判断文件是否是目录 if( -d $file ){ #文件是目录, 则文件夹数量+1 $cnt_dir++; #遍历所有文件, 递归方法 &recure($_) foreach <$file/*>; }else { #如果文件是普通文件,则文件数量+1 $cnt_file++; } } $dir = "/home/admin/blog"; &recure($dir); print "files:$cnt_file, dirs:$cnt_dir\n";
    最新回复(0)