bash와 유사한 명령을 실행하면 sudo find . "*dev/null"
쉘은 표현식과 일치하는 디렉토리와 일치하는 항목을 검색하는 모든 디렉토리를 인쇄합니다.
그러나 테스트 조건(예: )을 추가하는 플래그를 발행하면 sudo find . -wholename "*dev/null"
쉘은 내가 검색하는 표현식과 일치하는 디렉토리(및 액세스할 수 없는 디렉토리)만 인쇄합니다.
매뉴얼 페이지를 보았지만 find
명령에 테스트를 추가하면 왜 발생하는지 설명하는 내용을 찾을 수 없습니다.아니요검색된 각 디렉토리를 인쇄합니다. 이 find
명령이 테스트 인스턴스에서 인쇄되지 않는 이유를 설명할 수 있는 사람이 있습니까?
답변1
그리고 둘 sudo find . "*dev/null"
다 에서.
*dev/null
출발점. 모든 것이 일치한다는 명시적인 테스트는 없습니다. 달릴 때와 거의 비슷해요
sudo find .
sudo find "*dev/null"
후자가 인쇄할 가능성이 가장 높지만 find: '*dev/null': No such file or directory
전자는 다음을 찾습니다.모든 것존재하다 .
.
sudo find . -wholename "*dev/null"
스니펫에는 -wholename "*dev/null"
실제 테스트가 있습니다.
~에서POSIX 사양, 다음 스니펫이 관련됩니다.
유틸리티
find
는 path로 지정된 각 파일에서 디렉토리 계층 구조를 반복적으로 내려와 각 파일의 OPERANDS 섹션에 설명된 기본 색상으로 구성된 부울 표현식을 평가해야 합니다.
표현식이 없으면
기본은 항상 true로 평가되어야 하며 현재 경로 이름이 표준 출력에 기록됩니다.
당신의 sudo find . "*dev/null"
것은 사실입니다 sudo find . "*dev/null" -print
. 어떤 테스트도 이 이전에 표현식 평가를 중지 -print
할 수 없으므로 도달한 find
테스트의 모든 경로 이름에 대해 모든 경로 이름이 인쇄됩니다.-print
더 많은 클립:
( expression )
사실 이라면 사실입니다expression
.
expression [-a] expression
기본 연산자의 조합, AND 연산자는 두 기본 연산자의 병치에 의해 암시되거나-a
선택적 연산자에 의해 명시됩니다. 첫 번째 표현식이 false이면 두 번째 표현식을 평가하면 안 됩니다.
표현식이 없으면
-exec
가 포함되어 있지 않으면 주어진 표현식은 다음으로 효과적으로 대체됩니다.-ok
( given_expression ) -print
-exec
참고: 구현은 , -ok
, 컬렉션에 추가될 수 있습니다 -print
.
귀하의 sudo find . -wholename "*dev/null"
동등한
sudo find . \( -wholename "*dev/null" \) -a -print
(대괄호는 쉘에 특별하기 때문에 이스케이프됩니다.)
이제 -wholename "*dev/null"
false로 평가되면 그렇게 작동하므로 -print
평가되지 않습니다 . -a
이렇게 하면 주어진 경로 이름에 대한 테스트가 실패하면 find
경로 이름이 인쇄되지 않습니다.
노트:
- POSIX가 아닌 확장은 도구의 전반적인 아이디어를 변경해서는 안됩니다.
-wholename
POSIX에서는 필요하지 않습니다. 여전히 GNU에서는 POSIX에서 지정한find
것과 동일합니다 .-path
- 당신은 찾을 수 있습니다내 다른 답변흥미로운.