최근 수정된 파일이 포함되지 않은 폴더를 찾는 방법은 무엇입니까?

최근 수정된 파일이 포함되지 않은 폴더를 찾는 방법은 무엇입니까?

많은 양의 데이터가 덤프된 디렉토리가 있고 최근(예: 지난 5일 이내에) 내용이 수정되지 않은 모든 디렉토리를 찾고 싶습니다. 내가 찾고 있는 것을 수행하기 위해 호출을 작성하려고 하는데 find이것이 find가 처리할 수 있는 것보다 더 복잡한지 궁금해지기 시작했습니다. 내가 시도한 것은 다음과 같습니다. 그러나 예상한 대로 작동하지 않았습니다.

find "$DUMP_DIR" -type d -d 2 \
    -execdir bash -c 'find . -mtime -5 >/dev/null 2>&1' \; \
    -prune

디렉토리 구조의 레이아웃은 대략 다음과 같습니다 $DUMP_DIR/category{1,2,3,4,5}/thing*. thing*최근에 어떤 디렉토리에 새 데이터가 덤프되었는지 알고 싶습니다 . 순진한 솔루션이 find "$DUMP_DIR" -type d -d 2 -mtime +5내가 원하는 것보다 더 잘 어울릴 것입니다.

나는 이 표현식이 디렉토리에 지난 5일 이내에 수정된 콘텐츠가 포함되어 있는지 알아낼 것이라고 기대했지만 -execdir(아무 것도 발견되지 않으면 0이 아닌 값을 반환함) 실제로는 그렇지 않은 것 같습니다.

OS X에 BSD find를 설치하는 데 막혔습니다. 또한 표준 명령줄 유틸리티가 아닌 것은 설치하고 싶지 않습니다. 이를 수행하는 가장 합리적인 방법은 무엇입니까?

답변1

나는 이것이 당신의 필요에 맞을 것이라고 믿습니다. 각 디렉토리를 차례로 살펴보고 "최근 수정된" 파일을 확인합니다.

find * -type d |
    while read DIR
    do
        LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 -print -quit)
        test -z "$LINES" && echo "$DIR NOT RECENTLY MODIFIED"
    done

귀하의 경우에 맞지 않으면 find ... -maxdepth 1다음과 같이 자유롭게 변경하십시오.

LINES=$(find "$DIR" \( -type d -prune \) -o \( -type f -mtime -5 -print -quit \))

최근에 수정된 항목의 수를 계산하려는 경우(또는 -quit사용할 수 없는 경우)에 작동합니다.

LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 | wc -l | tr -d' ')
test 0 -eq "$LINES" && echo "$DIR NOT RECENTLY MODIFIED" || echo "$DIR has $LINES recent file(s)"

답변2

질문을 올바르게 이해했다면 이 작업은 매우 간단하게 수행될 수 있습니다.

find . -mtime +5 -exec bash -c 'echo "${0%/*}"' {} \; | sort | uniq

관련 정보