find를 사용하여 "or" 검색을 수행하는 방법은 무엇입니까? [복사]

find를 사용하여 "or" 검색을 수행하는 방법은 무엇입니까? [복사]

기본적으로 하나의 명령에서 2개(또는 그 이상)의 find 명령("AND" 대신 "OR" 검색)을 실행하는 방법을 알고 싶습니다.

find . -name "*.pem"
find . -name "*.crt"

답변1

find"또는" 연산자는 다음과 같습니다 -o.

find . -name "*.pem" -o -name "*.crt"

단락이군요.두 번째 부분은 첫 번째 부분이 false인 경우에만 평가됩니다. 일치하는 파일은 *.pem에 대해 테스트되지 않습니다 *.crt.

-o명시적으로( -a) 또는 암시적으로 "and"보다 우선순위가 낮습니다. 연산자를 결합하는 경우 "or" 부분을 괄호로 묶어야 할 수도 있습니다.

find . \( -name "*.pem" -o -name "*.crt" \) -print

내 테스트에서는 예상대로 정규식을 사용하는 것보다 훨씬 빨랐습니다(정규식은 glob보다 테스트 비용이 더 많이 들고 -regex파일 이름뿐만 아니라 전체 경로를 테스트합니다 -name).

답변2

이 질문을 입력하면서 find가 기본적으로 정규식 대신 와일드카드를 사용한다는 생각이 들었습니다. 하지만 정규식을 사용하여 이를 수행할 수 있는 방법이 있을 것이라고 확신합니다!

물론이죠... posix-extend를 사용하려면 정규식 유형을 변경해야 했지만 이로 인해 제가 원하는 결과가 나왔습니다.

find . -regextype posix-extended -regex ".*pem|.*crt"

카프라!

관련 정보