안녕하세요, 현재 xy_Number로 시작하고 오늘(지난 24시간 아님) 생성/편집된 로그 파일을 검색하려고 합니다.
나는 시도했다:
find /home/USER/logfilesError/ -maxdepth 1 -type f -daystart -mtime -1 print0 | xargs -0 grep - l xy_*
산출:
find: paths must precede expression: print0
다음을 결합해야 합니다.
find -maxdepth 1 -type f -daystart -mtime -1
그리고
ls | grep -E "xy_"
내가 달성하고 싶은 것은 다음과 같습니다
오늘의 특정 위치에서 로그 파일을 검색한 다음 해당 파일과 ERROR로 시작하는 출력 행을 추가로 검색합니다. (다른 라인 INFO 및 DEBUG)
검색이 제대로 작동하고 있습니다. 검색 후 grep을 사용하여 파일을 추가로 확인하여 ERROR가 포함된 파일을 찾고 싶습니다.
grep -rl "ERROR" /home/USER/logfilesError/
이를 스크립트로 결합하려면 어떻게 해야 합니까? 만약에? 누군가 나를 도와줄 수 있나요?
답변1
grep을 사용하여 find가 작업을 수행할 수 있는 이유:
find /home/USER/logfilesError/ -maxdepth 1 -type f -name "xy_*" -daystart -mtime -1
답변2
그 소리에서 당신은 다음을 찾고 있습니다 -name
:
find /path -maxdepth 1 -type f -name 'xy_*' -daystart -mtime -1 -exec grep -H ERROR {} +
에서 man find
:
-name pattern
파일 이름의 기본(선행 디렉터리가 제거된 경로)은 셸 패턴과 일치합니다. 메타 문자("*", "?" 및 "[]")는 기본 이름 시작 부분의 "."와 일치합니다(이는 findutils-4.2.2의 변경 사항입니다. 아래 표준 적합성 섹션 참조). 디렉터리와 그 아래의 파일을 무시하려면 -prune을 사용하세요. -path 설명의 예를 참조하세요. Bash를 포함한 일부 쉘은 쉘 모드에서 중괄호에 특별한 의미를 부여하지만 중괄호는 특별한 것으로 간주되지 않습니다. 파일 이름 일치는 fnmatch(3) 라이브러리 함수를 사용하여 수행됩니다. 쉘에 의해 확장되는 것을 방지하기 위해 패턴을 인용하는 것을 잊지 마십시오.