我有一个目录,其中包含约 5000 个 2,400 大小的 .txt 文件。
我只想要该目录中的一个文件名;顺序无所谓。
该文件将被处理和删除。
这不是脚本工作目录。
意图是:
- 打开该文件,
- 阅读,
- 做一些事情,
- 取消链接然后
- 循环到下一个文件。
我的粗略尝试不仅仅检查 .txt 文件,而且还必须仅针对一个文件名获取所有 ~5000 个文件名。我也可能调用了太多模块?
该Verify_Empty
子旨在验证是否有一个目录并且其中有文件,但是我的尝试失败了,所以我在这里寻求帮助。
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI ':standard';
print CGI::header();
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
###
use vars qw(@Files $TheFile $PathToFile);
my $ListFolder = CGI::param('openthisfolder');
Get_File($ListFolder);
###
sub Get_File{
$ListFolder = shift;
unless (Verify_Empty($ListFolder)) {
opendir(DIR,$ListFolder);
@Files = grep { $_ ne '.' && $_ ne '..' } readdir(DIR);
closedir(DIR);
foreach(@Files){
$TheFile = $_;
}
#### This is where I go off to process and unlink file (sub not here) ####
$PathToFile = $ListFolder.'/'.$TheFile;
OpenFileReadPrepare($PathToFile);
#### After unlinked, the OpenFileReadPrepare sub loops back to this script.
}
else {
print qq~No more files to process~;
exit;
}
exit;
}
####
sub Verify_Empty {
$ListFolder = shift;
opendir(DIR, $ListFolder) or die "Not a directory";
return scalar(grep { $_ ne "." && $_ ne ".." } readdir(DIR)) == 0;
closedir(DIR);
}
显然我对此很陌生。这种方法看起来很“饿”?抓取一个文件名并处理它似乎很多!指导会很棒!
编辑 - 最新尝试
my $dir = '..';
my @files = glob "$dir/*.txt";
for (0..$#files){
$files[$_] =~ s/\.txt$//;
}
my $PathAndFile =$files[0].'.txt';
print qq~$PathAndFile~;
这“有效”但是,它仍然获取所有文件名。到目前为止,这里没有一个例子对我有用。我想我今天会忍受这个,直到我弄明白为止。也许我会重新审视,看看是否有人提出了更好的办法。