2に一致しないファイルを検索したい-name
条件。私はそうすることができます:
find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"
これで適切な結果が得られますが、これらの2つの条件をORで結合できますか?
否定された-regex
を使用してこれを行うこともできます:-
find ./ ! -regex '.*\(deb\|vmdk\)$'
はい、できます:
find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)
POSIX spec からの説明:
!expression:プライマリの否定;単項NOT演算子。
(expression):式が真であれば真。
式-o式:プライマリの代替; OR演算子。最初の式が真の場合、2番目の式は評価されません。
開始と終了の両方の括弧の前にはバックスラッシュ(\
)シェルによる評価を防止します。
あなたは解決策に近づいていました:
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\)'
バックスラッシュはエスケープ文字です。 .
は1文字に一致し、*
は、前の文字と0回以上一致するため、.*
は、ゼロ個以上の文字に一致することを意味します。