30일 이내에 수정된 파일이 있는 하위 디렉터리를 포함하는 모든 최상위 디렉터리를 나열하는 스크립트 또는 명령

30일 이내에 수정된 파일이 있는 하위 디렉터리를 포함하는 모든 최상위 디렉터리를 나열하는 스크립트 또는 명령

이것은 매우 독특한 것입니다.

30일 이내에 새 파일이나 수정된 ​​파일이 있는 하위 디렉터리가 포함된 폴더의 모든 최상위 디렉터리를 나열하는 방법을 찾고 있습니다.

복제 방법을 사용하여 사용자 파일을 중앙 저장소에 동기화하고 지난 달에 어떤 사용자가 파일을 동기화했는지 모니터링할 수 있는 방법을 찾고 있습니다. 그러면 존재하지 않는 문제를 해결할 수 있습니다.

"find . -type d -mtime -30"을 사용했지만 이는 모든 하위 폴더를 나열하고 출력이 너무 커서 간결한 그림을 제공할 수 없습니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

나는 find각 디렉토리를 차례로 가져와 파이프를 통해 디렉토리가 grep -q .있는지 확인합니다.어느결과가 있는지 여부에 따라 조건부로 디렉터리 이름을 인쇄합니다.

for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\\n "$d"; done

답변2

이는 효율적이지 않을 수 있습니다.

find -mindepth 3 -maxdepth 3 -type f -mtime -30 | 
    xargs -n 1 dirname | 
    xargs -n 1 dirname | 
    uniq # (or sort -u, I assume find's output is already sorted)

답변3

find */ -type f -mtime -30 -print0 | 
    sed -z -e  's:/.*$::' | 
    sort -z -u | 
    tr '\000' '\n'

GNU sort및 GNU(NUL 분리 입력) 옵션이 필요합니다 sed.-z

find현재 디렉터리의 하위 디렉터리에 있는 30일이 지나지 않은 모든 파일을 나열합니다. 출력은 파이프로 연결되어 sed첫 번째 항목 이후의 모든 항목을 제거한 /다음 sort결과 디렉터리 이름을 고유하게 정렬합니다.

관련 정보