![find를 사용하여 "or" 검색을 수행하는 방법은 무엇입니까? [복사]](https://linux55.com/image/146835/find%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%22or%22%20%EA%B2%80%EC%83%89%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
기본적으로 하나의 명령에서 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"
카프라!