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