2

使ってみました

find . | grep -v '(.ext1|.ext2)$'

.ext1ただし、拡張子と.で終わるファイルは引き続き返されます.ext2。次に、次のことを試しました。

ls | grep -v ".ext1$" | grep -v ".ext2$" 

これは私が望むように機能します。私が探していることを行う別の方法はありますか? .ext1私がしたいのは、またはで終わらないすべてのファイルまたはディレクトリをリストすることだけです.ext2

4

4 に答える 4

3

.あなたはtry thisを逃れていません。それが動作します。エスケープ.する必要があることに注意してください。

ls | grep -v '\.ext1$' | grep -v '\.ext2$' 

あなたのために同じfind

探す 。| | grep -v '(\.ext1|\.ext2)$'

それが役立つことを願っています:)

于 2013-08-12T18:52:14.833 に答える
1

あなたはそれをすべて行うことができますfind

find . \! -name \*.ext1 \! -name \*.ext2
于 2013-08-12T18:48:32.607 に答える
0

これはうまくいくはずです:

ls | grep "[^(\.ext1|\.ext2)]$"
于 2013-08-12T18:53:03.267 に答える
0

grep -Eorを必要とする拡張正規表現 (ERE) を使用していますegrep:

find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep   -v '\.(ext1|ext2)$'

もエスケープした.ので、メタキャラクターとして扱われません。

あなたが書いたように ( grep -v '(.ext1|.ext2)$') かっことパイプはメタ文字ではありません (しかし.$です)。したがって、コマンドは次のような名前を削除します。

(Xext1|Yext2)
function(Aext1|Bext2)

括弧とパイプは文字通りファイル名の一部です。

于 2013-08-12T19:03:05.333 に答える