기본적으로 하나의 명령에서 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"
카프라!