모든 하위 폴더에서 최신 로그만 반복적으로 찾아 파일에 저장

모든 하위 폴더에서 최신 로그만 반복적으로 찾아 파일에 저장

저는 RHEL7 머신에서 개발 중입니다. 특정 계층 구조 아래의 각 하위 폴더에서 모든 최신(최신 파일만) .log 파일을 반복적으로 찾아서 "all_logs.txt" 파일에 전체 경로를 나열해야 합니다.

내 find 명령은 다음과 같으며 약 6000개 레코드의 전체 경로를 반환합니다.

cd ${SEARCHDIR}
find . -iname computer_import_*.log > all_logs.txt

여기서 문제는 이 find 명령이 모든 컴퓨터_import_를 찾고 있다는 것입니다..log 최신 컴퓨터만 필요합니다_import_각 하위 폴더에서 .log 파일을 검색합니다.

답변1

다음 명령을 사용해 보았는데 잘 작동합니다.

find . -type f -iname "computer_import_*.log" -daystart -mtime -1 > all_logs.txt

답변2

find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 > all_logs.txt

-iname그러면 매개변수와 일치하는 모든 파일을 찾아 실행 후 10일 이내에 수정하도록 제한합니다. find자세한 내용은 맨페이지를 참조하세요.

실행하기 전에 셸이 아닌 인수가 해석 -iname되도록 인수를 따옴표 로 묶었습니다 .findfind

이러한 기준에 따라 반환된 내용을 보려면 다음과 같이 하십시오.

find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 -exec ls -ld {} +

이 작업은 반환된 각 파일에 대해 수행되므로 ls마지막 수정 날짜가 표시됩니다. -mtime <+-N>원하는대로 값을 변경하십시오. 값은 -90지난 90일 이내에 수정된 파일을 반환합니다. 양수 값은 +9090일 전에 수정된 파일을 반환합니다.

**대체 설명**

찾아야 하는 요구 사항을 고려하여오직최신 문서는 다음 위치에 있습니다.어느그리고모두하위 디렉터리에서 다음 작업을 수행합니다.

find ${SEARCHDIR} -type d > /var/tmp/mydirs
while read -r line
do
    ls -alt "${line}" | grep -Ev "^(d|total)" | head -1 >> /var/tmp/mylogs
done < /var/tmp/mydirs

ls최신 수정 날짜부터 가장 오래된 수정 날짜순으로 디렉토리 내용을 정렬합니다. grep디렉토리 항목과 전체 크기 줄이 제거됩니다 . head검사 중인 디렉터리에서 첫 번째 파일(있는 경우)을 잘라냅니다.

관련 정보