我一直在尝试将多个文件分配给单个文件句柄。然后从那里处理整个文件句柄以查找某个模式,然后将其写入FIN_RESULTS。
的Linux
exp文件
我/ DIR1 /结果
我/ DIR2 /结果
等
这是我尝试的笨拙错误
open (FIN_RESULTS, ">", "FIN_RESULTS.txt") or die $!;
open(RESULTS, "-|"," find my/ -name RESULTS -print0 | xargs -0 cat");
while(<RESULTS>){
if(/match_something/){
do some commands;
print FIN_RESULTS $_;
}
close FIN_RESULTS;
close RESULTS;
但是我最终用当前目录的ls覆盖了perl脚本本身。
感谢您的帮助!!!!!我能够实现我最初的想法。
我还有第二个问题是,是否可以通过仅查看某些目录的方式实现查找?
如果我有
我/ abc_dir1 /结果
我/ dsa_dir2 /结果
我/ afx_dir3 /结果
但我只想搜索dir2和dir3。
@array1 = qw( dir2 dir3);
foreach $array1(@array1)
{ open(RESULTS, "-|"," find my/*$array1 -name RESULTS -print0 | xargs -0 cat");
}
但是我得到了这个错误,xargs:cat:由信号13终止。 所以不允许多次重新打开文件句柄。关于我能做什么的任何建议?
答案 0 :(得分:3)
假设你真的想做外部发现:
open RESULTS, "-|", "find my -name RESULTS -print0 | xargs -0 cat"
应该做你想做的事。
答案 1 :(得分:3)
Perl中的open
函数有两种格式:
这两个论点叫:
open (RESULTS, "|find my/ -name 'RESULTS'")
两个参数调用很简单,但是如果你碰巧有一个以垂直管道开头的文件名,你就会遇到问题。
另一种是首选的三种ARGUMENT语法:
open (RESULTS, "-|", "find my/ -name 'RESULTS'")
此语法使用第二个参数来声明您正在执行的打开类型:
">" - Write
">>" - Append
"<" - Read
"-|" - Read from command
"|-" - Write to command
看起来你已经把这两个搞糊涂了。
请注意:
您可以使用File::Find模块执行查找而不是Perl。
它更有效率,因为你没有启动一个单独的进程和更多独立于操作系统,因为它在Windows或Linux上的工作方式相同。