如何使用Perl在具有特定名称模式的目录下列出文件? [英] How can I list files under a directory with a specific name pattern using Perl?
问题描述
我有一个目录 / var / spool
,其中名为
I have a directory /var/spool
and inside that, directories named
a b c d e f g h i j k l m n o p q r s t u v x y z
在每个信件目录内,一个名为 user
里面,许多目录叫做 auser1
auser2
auser3
auser4
auser5
...
And inside each "letter directory", a directory called "user
" and inside this, many directories called auser1
auser2
auser3
auser4
auser5
...
每个用户目录包含邮件,文件名称具有以下格式:2. 3. 4. 5. etc。
Every user directory contains mail messages and the file names have the following format: 2. 3. 4. 5. etc.
如何在每个目录中列出每个用户的电子邮件文件以下方式:
How can I list the email files for every user in every directory in the following way:
/var/spool/a/user/auser1/11.
/var/spool/a/user/auser1/9.
/var/spool/a/user/auser1/8.
/var/spool/a/user/auser1/10.
/var/spool/a/user/auser1/2.
/var/spool/a/user/auser1/4.
/var/spool/a/user/auser1/12.
/var/spool/b/user/buser1/12.
/var/spool/b/user/buser1/134.
/var/spool/b/user/buser1/144.
等。
我需要这些文件,然后打开每个文件修改标题和正文。这部分我已经有,但是我需要第一部分。
I need that files and then open every single file for modify the header and body. This part I already have, but I need the first part.
我正在尝试这个:
dir = "/var/spool";
opendir ( DIR, $dir ) || die "No pude abrir el directorio $dirname\n";
while( ($filename = readdir(DIR))){
@directorios1 = `ls -l "$dir/$filename"`;
print("@directorios1\n");
}
closedir(DIR);
但不需要我的方式。
推荐答案
正如其他人所说,使用文件: :查找:
As others have noted, use File::Find:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
find(\&find_emails => '/var/spool');
sub find_emails {
return unless /\A[0-9]+[.]\z/;
return unless -f $File::Find::name;
process_an_email($File::Find::name);
return;
}
sub process_an_email {
my ($file) = @_;
print "Processing '$file'\n";
}
这篇关于如何使用Perl在具有特定名称模式的目录下列出文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!