2가지 기준에 맞지 않는 파일을 검색하고 싶습니다 -name
. 나는 이것을 할 수 있다:
find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"
이렇게 하면 올바른 결과가 나오지만 이 두 조건을 OR로 연결할 수 있나요?
답변1
그래 넌 할수있어:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
설명은 다음과 같습니다.POSIX 사양:
! 표현하다: 부정 기본 단항 NOT 연산자입니다.
(표현하다): 표현식이 참이면 참입니다.
표현하다 -영형 표현하다: 기본 대체 또는 연산자. 첫 번째 표현식이 true이면 두 번째 표현식을 평가하면 안 됩니다.
괄호(왼쪽 또는 오른쪽)에는 \
쉘이 평가하지 못하도록 백슬래시( )가 앞에 붙습니다.
답변2
부정을 사용하여 이 작업을 수행할 수도 있습니다 -regex
.
find ./ ! -regex '.*\(deb\|vmdk\)$'
답변3
당신은 해결책에 가깝습니다:
find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"
다음 논리 연산자를 순서에 관계없이 결합할 수 있습니다.
-a -and - operator AND
-o -or - operator OR
! - operator NOT
답변4
다음과 같은 정규식을 사용할 수 있습니다.
find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'
백슬래시는 이스케이프 문자입니다. .
단일 문자와 일치하며 *
이전 문자를 0회 이상 일치시키는 데 사용됩니다. 즉, .*
0개 이상의 문자와 일치한다는 의미입니다.