다음 명령을 쓰고 있습니다.
find . -mtime -1 -type f -exec grep -ln '20191122' {} \; | wc -l
이를 통해 "20191122"라는 문자열이 포함된 하루 동안 수정된 모든 파일을 찾고 마지막으로 설명과 일치하는 파일 수를 출력할 수 있습니다.
그러나 내가 속한 디렉토리에는 낮에도 업데이트되는 하위 디렉토리가 있으며 해당 디렉토리도 포함됩니다 wc -l
.
나는 사용하면 -type f
디렉토리가 아닌 "파일"만 계산할 것이라고 생각했습니다.
누구든지 오류나 도움을 볼 수 있습니까?
감사해요.
답변1
예, find ... -type f
파일만 검색하지만 재귀적으로 검색합니다.입력하다하위 디렉토리.
grep
현재 디렉터리의 파일 에만 적용하려면 -maxdepth 1
GNU find
명령과 함께 사용할 수도 있습니다. 이렇게 하면 두 수준 이상으로 내려가는 것을 방지할 수 있습니다 find
(즉, 현재 디렉터리로만).
find
유틸리티가 구현되지 않은 Unix에서 동일한 작업을 수행 하려는 경우 -maxdepth
다음을 고려할 수 있습니다.
find . ! -name . -prune -mtime -1 -type f -exec grep -ln '20191122' {} \;
.
이렇게 하면 사용이 중단되는 것을 방지할 수 있습니다 -prune
.
grep
파일 개수를 계산하는 경우에는 파일의 패턴을 감지한 다음 wc -l
올바르게 계산할 수 있는 내용을 출력하는 것이 더 안전합니다 . 파일 이름에 개행 문자가 포함되어 있으면 wc -l
잘못 계산됩니다.
예를 들어:
find . ! -name . -prune -mtime -1 -type f -exec grep -q '20191122' {} \; -exec echo x \; | wc -l
x
그러면 해당 문자열이 포함된 각 파일에 대해 한 줄의 문자가 출력되고 wc -l
해당 줄의 개수가 계산됩니다.