
본질적으로, 하나의 명령에서 2개(또는 그 이상)의 find 명령("and" 대신 "or" 검색)을 실행하는 방법을 알고 싶습니다.
find . -name "*.pem"
find . -name "*.crt"
답변1
find
의 "or" 연산자는 다음과 같습니다 -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가 기본적으로 정규식 대신 globbing을 사용한다는 생각이 들었습니다. 하지만 정규식을 사용하는 방법이 있을 거라고 확신합니다!
물론이죠... posix 확장을 사용하려면 정규식을 변경해야 했지만 그게 제가 원하는 결과를 얻었습니다.
find . -regextype posix-extended -regex ".*pem|.*crt"
카플라!