`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

작업을 지정했으므로 기본값이 더 이상 적용되지 않습니다. 하지만 이는 "및"이 "또는"보다 우선순위가 높기 때문일 것 -printf입니다 .-type f

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

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

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

관련 정보