2 이름 조건을 찾기에 결합하는 방법은 무엇입니까? ! -name “*deb” ! -name “*vmdk” 그리고

두 가지 -name조건 과 일치하지 않는 파일을 검색하고 싶습니다 . 나는 그렇게 할 수 있습니다 :

find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"

그리고 이것은 적절한 결과를 얻을 수 있지만 어떻게 든이 2 가지 조건을 OR로 결합 할 수 있습니까?



답변

negated를 사용 하여이 작업을 수행 할 수도 -regex있습니다.

 find ./ ! -regex  '.*\(deb\|vmdk\)$'

답변

그래 넌 할수있어:

find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)

POSIX 사양의 설명 :

! 표현 : 기본의 부정; 단항 NOT 연산자

( expression ) : expression이 true이면 true입니다.

expression -o expression : 1 차 교체; OR 연산자 첫 번째 표현이 참이면 두 번째 표현은 평가되지 않습니다.

\쉘에 의한 평가를 방지하기 위해 여는 괄호와 닫는 괄호 앞에 백 슬래시 ( ) 가 붙습니다 .


답변

당신은 해결책에 가까웠습니다.

find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"

다음 논리 연산자를 순서대로 결합 할 수 있습니다.

-a   -and      - operator AND
-o   -or       - operator OR
!              - operator NOT

답변

다음과 같이 정규식을 사용할 수 있습니다.

find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'

백 슬래시는 이스케이프 문자입니다. .단일 문자와 *일치하고 이전 문자를 0 번 이상 일치시키는 역할을하므로 .*0 개 이상의 문자 일치를 의미합니다.