find 명령은 하위 디렉토리를 계산하지 않고 특정 문자열을 포함하는 디렉토리에 파일이 몇 개 있는지 계산합니다.

find 명령은 하위 디렉토리를 계산하지 않고 특정 문자열을 포함하는 디렉토리에 파일이 몇 개 있는지 계산합니다.

다음 명령을 쓰고 있습니다.

find . -mtime -1 -type f -exec grep -ln '20191122' {} \; | wc -l

이를 통해 "20191122"라는 문자열이 포함된 하루 동안 수정된 모든 파일을 찾고 마지막으로 설명과 일치하는 파일 수를 출력할 수 있습니다.

그러나 내가 속한 디렉토리에는 낮에도 업데이트되는 하위 디렉토리가 있으며 해당 디렉토리도 포함됩니다 wc -l.

나는 사용하면 -type f디렉토리가 아닌 "파일"만 계산할 것이라고 생각했습니다.

누구든지 오류나 도움을 볼 수 있습니까?

감사해요.

답변1

예, find ... -type f파일만 검색하지만 재귀적으로 검색합니다.입력하다하위 디렉토리.

grep현재 디렉터리의 파일 에만 적용하려면 -maxdepth 1GNU 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해당 줄의 개수가 계산됩니다.

관련 정보