검색에서 디렉토리 제외

검색에서 디렉토리 제외

find/mnt나는 그것을 사용할 때마다 항상 완전히 미스터리입니다. 검색에서 제외 하고 싶지만 (WSL의 Ubuntu 20.04에서 bash에 있으므로 Windows 공간에서 검색하는 것을 원하지 않습니다) find실수로 진행됩니다. 그 디렉토리에 들어가고 나를 완전히 무시합니다. 이 페이지에서 구문을 찾았습니다.https://stackoverflow.com/questions/4210042/how-to-exclude-a-directory-in-find-command모든 변형을 시도했지만 모두 실패했습니다.

sudo find / -name 'git-credential-manager*' -not -path '/mnt/*'
sudo find / -name 'git-credential-manager*' ! -path '/mnt/*'
sudo find / -name 'git-credential-manager*' ! -path '*/mnt/*'

이렇게 하면 오류가 발생 /mnt하고 오류가 발생합니다(위 구문은 명확해 보이고 스택오버플로 페이지 구문은 올바른 것 같아서 정말 실망스럽습니다).

find: ‘/mnt/d/$RECYCLE.BIN/New folder’: Permission denied
find: ‘/mnt/d/$RECYCLE.BIN/S-1-5-18’: Permission denied

find누군가 내 디렉터리 제외 스위치 무시를 중지하는 방법을 알려줄 수 있나요 ?

답변1

찾기는 -path경로를 제외하지 않습니다. 이는 "이름이 이 경로와 일치하는 항목을 보고하지 않음"을 의미합니다. 여전히 디렉토리에 드롭다운되어 검색됩니다. 당신이 원하는 것은 -prune(에서 man find):

       -prune True;  if  the file is a directory, do not descend into it.  If
              -depth is given, then -prune has no  effect.   Because  -delete
              implies  -depth, you cannot usefully use -prune and -delete to‐
              gether.  For example, to skip the directory src/emacs  and  all
              files  and  directories  under  it,  and print the names of the
              other files found, do something like this:
                  find . -path ./src/emacs -prune -o -print

그래서 당신은 다음을 원합니다:

sudo find / -path '/mnt/*' -prune -name 'git-credential-manager*' 

-mount제외하려는 대상에 따라 (GNU find) 또는 (기타)를 사용하는 것이 -xdev더 쉬울 수도 있습니다 .

에서 man find:

-mount다른 파일 시스템의 디렉토리를 다운그레이드하지 마십시오. -xdev다른 find 버전과의 호환성을 위한 대체 이름입니다 .

그래서:

sudo find / -mount -name 'git-credential-manager*' 

답변2

이 옵션은 무시되지 않습니다. 조건자는 -path발견된 모든 파일에 대해 평가되며 해당 트리의 파일에 대해서는 실패합니다. 이는 디렉토리 트리가 탐색되는 방식에 영향을 주지 않으며 외부의 모든 항목뿐만 아니라 그 안에 있는 파일과 도 일치하는 find것과 같은 것을 가질 수 있습니다 .find . ! -path "./foo/*" -o -name '*.txt'foo*.txt

이것GNU 매뉴얼 페이지여기서 무엇을 해야 할지 매우 명확합니다 -prune. 대신 다음을 사용하세요.

-path pattern
...전체 디렉토리 트리를 무시하려면 -prune트리의 모든 파일을 확인하는 대신 사용하세요. 예를 들어, 디렉터리 src/emacs와 그 아래의 모든 파일 및 디렉터리를 건너뛰고 발견된 다른 파일의 이름을 인쇄하려면 다음을 수행합니다.

find . -path ./src/emacs -prune -o -print

관련 정보