많은 양의 데이터가 덤프된 디렉토리가 있고 최근(예: 지난 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