perl-查询某目录及其子目录下的某类匹配文件

简介: 1、使用finduse strict;use File::Find; my @path = 'e:/xampp';push (@path,'e:/xampp');push (@path,'d:/eclipse-reporting-galileo-SR2-win32');sub wanted {...

1、使用find
use strict;
use File::Find;

my @path = 'e:/xampp';
push (@path,'e:/xampp');
push (@path,'d:/eclipse-reporting-galileo-SR2-win32');
sub wanted {
    if ( -f $File::Find::name ) {
        if ( $File::Find::name =~ /\.xml$/ ) {
            print "$File::Find::name\n";
        }
    }
}
find( \&wanted, @path );

 

 

 2、自己写代码

 

 

#取出某个目录含子目录的特定文件
#程序:刘兴
#时间:2010.3.19
#blog:http://deepfuture.iteye.com
#QQ:782322192
use 5.010;
use warnings;
use strict;
my $dirs='D:\Boa Constructor';# 初始路径
my $lsfile;
my @filedir;
my %filediryj;#已经访问过的目录 ,目录名=>文件数目
my $flcount;
my $ppfile;#文件匹配符 以正则方式表达的
$ppfile='\.py$'; #文件匹配符 以正则方式表达的 ,这里是*.py
unshift (@filedir,$dirs);
$|=1;
my $filedir;
while ($filedir=shift(@filedir)){
   opendir DH,$filedir or die "不能打开$filedir"; #打开目录
   say "=======================================";
   next if exists $filediryj{$filedir};#如果目录已经访问过了就不再访问
   $flcount=0;
   foreach $lsfile(readdir DH){#读取目录
      next if $lsfile=~m/^\./;
      $lsfile="$filedir\\$lsfile";
      if ( -d $lsfile){
         unshift (@filedir,$lsfile);
      }
      elsif ($lsfile=~m/$ppfile/i) {
         $flcount++;
         say $lsfile;#匹配到的文件名
      }
  }
  close DH;
  $filediryj{$filedir}=$flcount;#目录下共有多少个文件,使用哈希
  say "目录$filedir下共$flcount个匹配文件";
}
say "=======================================";
say "查询结果统计";
#访问哈希列表
$flcount=0;
my $key;
my $value;
while (($key,$value)=each %filediryj){
  say "$key目录文件数目:$value";
  $flcount+=$value;
}
say "共有$flcount个文件匹配";


转自:

http://deepfuture.iteye.com/blog/619998

相关文章
|
2月前
|
Linux
`grep`命令搜索当前目录及其子目录下的所有文件
`grep`命令搜索当前目录及其子目录下的所有文件
287 1
|
3月前
|
Shell
grep 搜索当前文件夹下的所有子文件中的文件是否包含8888字符串的命令
要在当前文件夹及其所有子文件夹中的文件中搜索包含字符串 "8888" 的文件,你可以使用 grep 命令结合 -r 或 -R 选项(表示递归搜索)。这里是具体的命令: bash grep -r "8888" . 其中: -r 或 -R:递归搜索。 "8888":你要搜索的字符串。 .:表示当前目录。 这个命令会列出所有包含字符串 "8888" 的文件的名称以及匹配的行。如果你只想看到文件名,而不看具体的匹配行,可以加上 -l 选项: bash grep -rl "8888" . 这样,命令只会输出包含字符串 "8888" 的文件名。
|
6月前
logrotate配置通配符对多个目录及其子目录文件进行切割
logrotate配置通配符对多个目录及其子目录文件进行切割
|
11月前
|
Shell Perl
把当前目录(包含子目录)下所有后缀为 “.sh” 的文件后缀变更为 “.shell”,之后删除每个文件的第二行
把当前目录(包含子目录)下所有后缀为 “.sh” 的文件后缀变更为 “.shell”,之后删除每个文件的第二行。
57 1
|
12月前
|
JavaScript
[✔️]cmake command 无法使用通配符匹配文件,只能检索下目录指定文件
[✔️]cmake command 无法使用通配符匹配文件,只能检索下目录指定文件
129 0
|
机器学习/深度学习 移动开发 Go
正则表达式使用说明(包含find命令与grep命令)
正则表达式使用说明(包含find命令与grep命令)
113 0
|
Python
Python获取指定目录下的所有文件路径、获取指定目录下所有文件名(但是不包含子目录中文件名)、获取指定目录下所有pdf文件名(但是不包含子目录中pdf文件名)
Python获取指定目录下的所有文件路径、获取指定目录下所有文件名(但是不包含子目录中文件名)、获取指定目录下所有pdf文件名(但是不包含子目录中pdf文件名)
196 0
|
机器学习/深度学习 Linux Windows
linux:2.3.4 查找/搜索命令(find+grep)+压缩/解压缩命令(gzipbzip2+tar+mv+mkdir)
linux:2.3.4 查找/搜索命令(find+grep)+压缩/解压缩命令(gzipbzip2+tar+mv+mkdir)
181 0
linux:2.3.4 查找/搜索命令(find+grep)+压缩/解压缩命令(gzipbzip2+tar+mv+mkdir)
|
Linux 数据库 Windows
linux中的chgrp改变所属组、修改bigbig.txt文件所属主用户拥有读写权限,并使其他用户具有写执行权限、find查找文件或者目录、locate快速定位文件路径、grep 过滤查找及“|”管道符、gzip/gunzip 压缩、zip/unzip 压缩
chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)第一种方式 chmod [{ugoa}{±=}{rwx}] 文件或目录。第一种方式 chmod [{ugoa}{±=}{rwzip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)zip 压缩命令在windows/linux都通用,可以压缩目录且保留源文件。gzip 文件 (功能描述:压缩文件令下。linux常用命locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给 定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保
179 1
linux中的chgrp改变所属组、修改bigbig.txt文件所属主用户拥有读写权限,并使其他用户具有写执行权限、find查找文件或者目录、locate快速定位文件路径、grep 过滤查找及“|”管道符、gzip/gunzip 压缩、zip/unzip 压缩
|
网络安全
tar排除文件和目录的用法
tar czvf /tmp/bak.tar.gz \ --exclude 'download/*' \ --exclude .ssh \ --exclude .bashrc \ . 使用--exclude可以排除文件和目录。
3942 0