두 가지 -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 개 이상의 문자 일치를 의미합니다.