다음과 같이 perl 코드가 있습니다. 패턴과 일치하는 파일을 선택하려고 시도합니다.파일 배열의 패턴과 일치하는 파일 찾기
opendir ERR_STAGING_DIR, "$ERR_STAGING" or die "$PID: Cannot open directory $ERR_STAGING";
@allfiles = grep !/^$ERR_STAGING\/\./, map "$ERR_STAGING/$_", readdir(ERR_STAGING_DIR);
closedir(ERR_STAGING_DIR);
$ERR_FILETYPE = basename ($ERR_FILETYPE);
$ERR_FILETYPE =~ s/\./\\\./g;
$ERR_FILETYPE =~ s/\*/\*/g;
@file_type = grep /^$ERR_STAGING/./$ERR_FILETYPE$/, @allfiles;
$numelements = @file_type;
if ($numelements <= 0) {
print LOG "$PID: No files match specified pattern, exiting.\n";
&HandlerDie($NO_FILE_TYPE, $current_poid);
}
여기 제가 위에서 설명합니다. grep ERR_STAGING 디렉토리의 모든 파일. grep 파일은 'BVN*.fin.bc_lerr.xml.bc'
과 일치합니다 (예 : BVN_201608250000.fin.bc_lerr.xml.bc
). 파일을 가지고 뭔가를하십시오. 그러나 위의 코드는 패턴과도 일치하지 않는 파일을 반환하고 있습니다. 또한 픽업 일부 임시 디렉토리입니다.
어디 코드의 패턴'BVN * ...'? – Mike
@Mike ERR_FILETYPE은 속성 파일에 설정된 변수입니다. $ ERR_FILETYPE = "BVN * .fin.bc_lerr.xml.bc"; – user2570205
'$ ERR_STAGING' 변수에 정규식 메타 문자'\ |() [{^ $ * +? . 예기치 않은 행동을 취할 수 있습니다. 자세한 내용은 [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html)를 참조하십시오. 리터럴 문자열과 일치시키려는 정규식을 항상 인용 할 것을 권장합니다. –