`find -type l`은 파일과 일치하지만 `-type l -o -type f`는 일치하지 않지만 명시적인 `-print`에서만 사용됩니다.

`find -type l`은 파일과 일치하지만 `-type l -o -type f`는 일치하지 않지만 명시적인 `-print`에서만 사용됩니다.

저는 GNU를 사용하고 있습니다 find.

내 문제를 이 쉘 세션으로 단순화했습니다.

$ mkdir t
$ cd t
$ touch a 
$ ln -s a b
$ find -type l
./b
$ find -type l -o -type f
./a
./b
$ find -type l -print
./b
$ find -type l -o -type f -print
./a

제가 너무 졸려서 그럴 수도 있지만, 다음 두 가지 사항이 저에게는 이해가 되지 않습니다.

  • 그렇지 않습니까 true OR false == true? 일치 에도 불구하고 추가로 일치가 중지되는 -o -type f이유는 무엇입니까 ?find./b-type l
  • 매뉴얼 페이지에는 이것이 -print기본 표현식이라고 나와 있는데, 언급되지 않은 경우 파일이 인쇄되지만 언급된 경우 생략되는 것은 어떻게 가능합니까?

-printf이는 (내가 실제로 필요한 것)을 사용할 때도 발생합니다 . 다른 표현도 영향을 받는 것 같아요.

답변1

~ 안에

find -type l -o -type f -print

작업을 지정했으므로 기본값이 더 이상 적용되지 않습니다. 그러나 여기서는 “and”가 “or”보다 우선순위가 높기 때문에 -printf여기에 묶여 있습니다 . -type f당신은 이것을 다음과 동일하다고 생각할 수 있습니다

find \( -type l \) -o \( -type f -print \)

링크와 파일을 모두 동일한 방식으로 처리하려면 테스트를 그룹화해야 합니다.

find \( -type l -o -type f \) -print

관련 정보