我已将文本文件“FilenameKeyword.txt”文件放在E:/ Test文件夹中,在我的perl脚本中我试图遍历文件夹而我正在尝试查找文件名中包含字符串的文件“关键字“在其中,后来我在我的脚本中打印了该文件的内容。 现在我希望对放在压缩的tar文件中的文件做同样的事情。
我试图提取细节的假设文件: E:\ test.tar.gz
想知道perl是否有可能在没有解压缩/解压缩假想文件的情况下搜索和读取文件。如果不可能,我还会分配一些文件内存来解压缩文件,在解压缩文件后应删除来自特定文本文件的内容。
在互联网上搜索时我可以通过使用Archive :: Extract来提取和读取gzip / tar文件,这是Perl的新手 - 我真的很困惑我应该如何使用它。你能帮忙吗....
输入文件:FilenameKeyword.txt
脚本:
use warnings;
use strict;
my @dirs = ("E:\\Test\\");
my %seen;
while (my $pwd = shift @dirs) {
opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files)
{
if (-d $file and ($file !~ /^\.\.?$/) and !$seen{$file})
{
$seen{$file} = 1;
push @dirs, "$pwd/$file";
}
next if ($file !~ /Keyword/i);
my $mtime = (stat("$pwd/$file"))[9];
print "$pwd$file";
print "\n";
open (MYFILE, "$pwd$file");
while (my $line = <MYFILE>){
#print $line;
my ($date) = split(/,/,$line,2);
if ($line =~ s!<messageText>(.+?)</messageText>!!is){
print "$1";
}
}
}
}
输出(在测试程序文件中放置在E:\ Test下):
E:\Test\FilenameKeyword.txt
1311 messages Picked from the Queue.
寻求帮助以检索位于其下的文件的内容 E:\ test.tar.gz
期望的输出:
E:\test.tar.gz\FilenameKeyword.txt
1311 messages Picked from the Queue.
答案 0 :(得分:1)
我被困在使用CPAN模块,CPAN模块对我不起作用,因为我在同一台机器上有oracle 10g企业版,因为做了一些软件冲突活动状态perl无法编译并参考perl lib for CPAN模块,我已经在我的机器上卸载了oracle来完成这项工作....
#!/usr/local/bin/perl
use Archive::Tar;
my $tar = Archive::Tar->new;
$tar->read("test.tar.gz");
$tar->extract();
答案 1 :(得分:0)
如果您的文件只是gzip压缩,您可以在&#34;流式传输&#34;概述的方式here (Piping to/from a child process without system or backtick - gzipped tar files)。本文介绍了一种使用open和fork来打开和解压缩文件的技术,然后将它提供给Perl的while(),允许你迭代它。
由于tar基本上是串联的,所以可以根据你的场景进行调整。