이것은 매우 독특한 것입니다.
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
결과 디렉터리 이름을 고유하게 정렬합니다.