나는 원해요:
- 대문자로 시작하는 모든 디렉토리 찾기
- 그런 다음 이 디렉터리 내에서 ".git"이라는 이름의 모든 디렉터리를 찾습니다.
이는 성능 최적화를 위한 것입니다. 내 해결책은 먼저 검색 범위를 특정 디렉터리로 좁힌 다음 그 안에서 검색하는 것이었습니다.
우선 제 생각은 이렇습니다.
find / -mindepth 1 -maxdepth 1 -name "[[:upper:]]*"
두 번째로 사용하는 것은 다음과 같습니다.
find / -type d -name ".git" 2>/dev/null
이제 나는 그것들을 어떻게 연결해야 할지 모르겠습니다. 두 번째 항목은 find
첫 번째 항목의 결과만 검색하기를 원합니다 find
.
또는 XY 문제인 경우 속도 개선을 위한 제안 사항을 알려주세요.
.git
머신의 모든 디렉토리를 찾아야 합니다 . 그러나 디렉터리는 .git
대문자로 시작하는 최상위 디렉터리에 있어야 합니다.
답변1
find
여기에서는 다음을 사용하여 표현식을 사용하거나 -mindepth
/ GNUism을 피할 수도 있습니다 -maxdepth
.
find / ! -path / ! -path '/[[:upper:]]*' -prune -o -name .git -type d -print
보다 일반적으로 다음 find
을 통해 이식 가능한 명령을 연결할 수 있습니다.
find ... -exec sh -c '
find "$@" ... -exec ... {\} ...' sh {} +
{}
(이는 외부(첫 번째) 조회에서 선택되지 않도록 내부(두 번째) 조회에 를 삽입하는 방법을 보여줍니다 .
또는 최신 버전의 GNU find
(4.9.0 이상)를 사용하세요.
find ... -print0 | find -files0-from - ...
답변2
첫 번째는 find
단일 레벨만 검색하므로 이를 간단한 쉘 와일드카드 패턴으로 바꿀 수 있습니다: . 그런 다음 이를 검색 위치로 사용합니다 /[[:upper:]]*
.find
find /[[:upper:]]* -type d -name ".git" 2>/dev/null