조회에서 2개의 이름 조건을 결합하는 방법은 무엇입니까?

조회에서 2개의 이름 조건을 결합하는 방법은 무엇입니까?

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개 이상의 문자와 일치한다는 의미입니다.

관련 정보