使ってみました
find . | grep -v '(.ext1|.ext2)$'
.ext1ただし、拡張子と.で終わるファイルは引き続き返されます.ext2。次に、次のことを試しました。
ls | grep -v ".ext1$" | grep -v ".ext2$"
これは私が望むように機能します。私が探していることを行う別の方法はありますか? .ext1私がしたいのは、またはで終わらないすべてのファイルまたはディレクトリをリストすることだけです.ext2。
.あなたはtry thisを逃れていません。それが動作します。エスケープ.する必要があることに注意してください。
ls | grep -v '\.ext1$' | grep -v '\.ext2$'
あなたのために同じfind
探す 。| | grep -v '(\.ext1|\.ext2)$'
それが役立つことを願っています:)
あなたはそれをすべて行うことができますfind:
find . \! -name \*.ext1 \! -name \*.ext2
これはうまくいくはずです:
ls | grep "[^(\.ext1|\.ext2)]$"
grep -Eorを必要とする拡張正規表現 (ERE) を使用していますegrep:
find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep -v '\.(ext1|ext2)$'
もエスケープした.ので、メタキャラクターとして扱われません。
あなたが書いたように ( grep -v '(.ext1|.ext2)$') かっことパイプはメタ文字ではありません (しかし.と$です)。したがって、コマンドは次のような名前を削除します。
(Xext1|Yext2)
function(Aext1|Bext2)
括弧とパイプは文字通りファイル名の一部です。