find
이 명령을 사용하여 특정 파일이 포함되지 않은 디렉터리를 찾으려면 어떻게 해야 합니까 ? 예를 들어 개정 관리를 받아야 하는 디렉터리가 여러 개 있는 경우 하위 디렉터리가 없는 디렉터리를 검색하고 찾을 수 있습니까 .git
? 또는 내 프로젝트에서 모든 모듈에 utilities.py
파일이 있어야 한다고 지정합니다. 필요한 파일이 아직 없는 하위 디렉터리를 어떻게 검색할 수 있습니까?
답변1
이것해결책당신에게 도움이 될 수 있는 것은,
find . -type d '!' -exec test -e "{}/utilities.py" ';' -print
시험
- 나는 이름이 붙은 4개의 하위 디렉터리를 만들었습니다.디렉토리 1,디렉토리 2,목차 3그리고 공백이 있는 디렉터리. 이것이 공백을 똑같이 잘 처리하는지 테스트하고 싶었기 때문에 이름에 공백이 있는 디렉터리를 만들었습니다.
- 파일을 만들었습니다.파일 1,파일 2,파일 3그리고파일 4존재하다디렉토리 2 그리고목차 3.
- 존재하다디렉토리 1, 내가 만든다파일 1,파일 2,파일 3.
- 존재하다공백이 있는 디렉터리, 저는 다음과 같은 파일을 만들었습니다.공백이 있는 파일.
이제 find 명령을 실행합니다.
find . -type d '!' -exec test -e "{}/file with spaces" ';' -print
내가 얻는 결과는 다음과 같습니다.
. ./dir1 ./dir2 ./dir3
예상대로 디렉토리 이후공백이 있는 디렉터리라는 파일이 포함되어 있습니다.공백이 있는 파일출력에는 나열되지 않습니다.
find
명령을 다음으로 변경하면파일 4그 결과 내가 얻는 결과는 다음과 같습니다.. ./dir with spaces ./dir1
편집하다
그러나 최종 수준에 하위 디렉터리와 파일이 중첩되어 있으면 위 방법이 작동하지 않는 것 같습니다. 따라서 이 상황을 극복하기 위해 결과를 토론과 같은 것으로 수정할 수 있습니다.여기.
find . -type f -not -name 'utilities.py' -exec dirname {} \; | sort -u
Giles가 그의 책에서 제안한 것처럼논평,
.git
상위 디렉토리를 포함하는 디렉토리를 건너뛰는 것이 더 유용할 것입니다.git
. 올바른 위치에 -prune을 추가하면 됩니다.find . -type d -exec test -e "{}/.git" ';' -prune -o -print