照会で2つの名前条件を結合する方法は?

照会で2つの名前条件を結合する方法は?

2つの基準に合わないファイルを検索したいと思います-name。私はこれを行うことができます:

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

これで正しい結果が得られますが、これら2つの条件をORにリンクできますか?

答え1

ええ、あなたはできます:

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

説明は次のとおりです。POSIX仕様:

表現する: 否定基本単項 NOT 演算子です。

表現する):式が真の場合は真です。

表現する - モールド 表現する: デフォルトの置換または演算子。最初の式がtrueの場合、2番目の式を評価しないでください。

括弧(左または右)には、\シェルが評価しないようにバックスラッシュ()が前に付けられます。

答え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回以上一致させるために使用されます。つまり、.*ゼロ個以上の文字と一致するという意味です。

関連情報