텍스트 기반 파일이 많이 포함된 폴더에서 "FCE-Error" 문자열을 가져오고 싶습니다.
폴더는 이렇게 생겼어요
-rw-r--r-- 1 root root 0 May 22 10:30 T201805220930.CIR
-rw-r--r-- 1 root root 11298297 May 22 10:40 T201805220935.CDR
-rw-r--r-- 1 root root 0 May 22 10:35 T201805220935.CIR
-rw-r--r-- 1 root root 12230924 May 22 10:45 T201805220940.CDR
-rw-r--r-- 1 root root 0 May 22 10:40 T201805220940.CIR
-rw-r--r-- 1 root root 12707339 May 22 10:50 T201805220945.CDR
-rw-r--r-- 1 root root 0 May 22 10:45 T201805220945.CIR
-rw-r--r-- 1 root root 13080477 May 22 10:55 T201805220950.CDR
-rw-r--r-- 1 root root 0 May 22 10:50 T201805220950.CIR
-rw-r--r-- 1 root root 13762418 May 22 11:00 T201805220955.CDR
-rw-r--r-- 1 root root 0 May 22 10:55 T201805220955.CIR
-rw-r--r-- 1 root root 13582035 May 22 11:05 T201805221000.CDR
-rw-r--r-- 1 root root 0 May 22 11:00 T201805221000.CIR
-rw-r--r-- 1 root root 13910251 May 22 11:10 T201805221005.CDR
-rw-r--r-- 1 root root 0 May 22 11:05 T201805221005.CIR
-rw-r--r-- 1 root root 3360658 May 22 11:11 T201805221010.CDT
-rw-r--r-- 1 root root 0 May 22 11:10 T201805221010.CIT
5분마다 새 파일 생성 CDT 파일 = 실시간 실행 로그 파일 CDR 파일 = 새 파일을 생성하기 전의 이전 CDT 파일
이 문자열 FCE-Error를 찾으려면 .cdt 또는 cdr 파일을 grep하는 bash 스크립트가 필요합니다.
긍정적인 값/항목이 발견되면 이메일을 통해 알림을 보내야 합니다.
답변1
파일이 현재 디렉토리에 있고 다음을 사용하고 있다고 가정합니다 bash
.
files=( T*.CDT )
grep 'FCE-Error' "${files[-1]}"
.CDT
그러면 해당 문자열에 대한 최신 파일이 검색됩니다. 다른 유형의 파일에도 동일한 작업을 수행할 수 있습니다.
쉘 와일드카드 패턴은 T*.CDT
사전순으로 정렬된 일치하는 모든 파일 이름으로 확장되며, 일반 파일 이름(올바른 정렬의 올바른 타임스탬프 포함)을 사용하고 있으므로 마지막 파일이 최신 파일이 됩니다.
문자열이 발견되면 이메일을 통해 경고를 보냅니다.
files=( T*.CDT )
if grep -q 'FCE-Error' "${files[-1]}"; then
mail -s 'Alert' [email protected] <<END_MESSAGE
We've found "FCE-Error" in ${files[-1]}, do something!
END_MESSAGE
fi
다른 POSIX 셸을 사용하세요.
set -- T*.CDT # set positional parameter to all matching filenames
shift "$(( $# - 1 ))" # shift off all but the last filename
if grep -q 'FCE-Error' "$1"; then
mail -s 'Alert' [email protected] <<END_MESSAGE
We've found "FCE-Error" in $1, do something!
END_MESSAGE
fi
답변2
내 생각에 이것은 다음과 같아야합니다.
[ $(find /path/to/dir -cmin -5 -type f -exec grep -F 'FCE-Error' {} \; | wc -l) -gt 0 ] && mail [...] # I let you complete mail command
이 줄은 지난 5분(-cmin -5) 이내에 생성된 파일(-type f)을 검색(찾기)하며, grep 실행마다 출력을 wc로 전달하여 줄 수를 계산하고 전체 결과를 비교합니다. 0(-gt)으로 설정하면 true인 경우 mail 명령이 트리거되어 메일을 보냅니다.
5분마다 cron에서 실행되도록 이 명령을 설정할 수 있으며 중복 경고를 방지해야 합니다(경고가 막 발생하고 cron이 제 시간에 맞춰지지 않는 몇몇 극단적인 경우)
답변3
가장 최근의 .cdt/cdr 파일만 grep하시겠습니까?
dir=/path/to/files
lastCIR="$(find ${dir} -type f -name '*.CIR' | tail -1)"
lastCDR="$(find ${dir} -type f -name '*.CDR' | tail -1)"
if grep FCE-Error "${lastCIR}" || grep FCE-Error "${lastCDR}";then
echo 'alert' | mail -s subject [email protected]
fi