![사용 방법 또는 찾아서 실행하는 방법 [중복]](https://linux55.com/image/224010/%EC%82%AC%EC%9A%A9%20%EB%B0%A9%EB%B2%95%20%EB%98%90%EB%8A%94%20%EC%B0%BE%EC%95%84%EC%84%9C%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EC%A4%91%EB%B3%B5%5D.png)
*.c
확장자 가 있는 파일을 찾으려고 합니다 *.h
. 나는 다음 명령을 사용합니다
find "$path" -type f -iname "*.c" -o -iname "*.h" -exec ls {} \;
이는 ls *.h
일치만 수행합니다. 나는 시도했지만 -o -iname *.c -o -iname *.h
같은 일이 일어났습니다. c 및 h 파일에서 실행하고 싶나요?
답변1
분리된 절을 그룹화해야 합니다.
find "$path" -type f \( -iname "*.c" -o -iname "*.h" \) -exec ls {} \;
이것이 없으면 명령은 두 개의 분리된 절 집합, 즉 한편으로는 다른 한편 find
으로는 해석됩니다 . 그렇기 때문에 일치하는 항목만 볼 수 있습니다.-type f -iname "*.c"
-iname "*.h" -exec ls {} \;
*.h
ls
그건 그렇고, 이렇게 달리는 것은 의미가 없습니다. 당신은 사용할 수도 있습니다
find "$path" -type f \( -iname "*.c" -o -iname "*.h" \) -print
(그러나 어쩌면 ls
자리 표시자일 수도 있습니다).
두 개의 glob을 결합하여 명령을 단순화할 수도 있습니다.
find "$path" -type f -iname "*.[ch]"
(기본 동작에 따라 다름 -print
)