저는 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