は、ここに1つは、bashで、パターンに一致するすべてのファイルを一覧表示するかもしれない方法は次のとおりです。パターンに一致しないファイルを一覧表示しますか?
ls *.jar
パターンの補数を一覧表示する方法は?つまり、* .jarと一致しないすべてのファイル?
は、ここに1つは、bashで、パターンに一致するすべてのファイルを一覧表示するかもしれない方法は次のとおりです。パターンに一致しないファイルを一覧表示しますか?
ls *.jar
パターンの補数を一覧表示する方法は?つまり、* .jarと一致しないすべてのファイル?
一つの解決策はfind
の適切なバージョンでls -1|grep -v '\.jar$'
[ls'の出力を解析しない](http://mywiki.wooledge.org/ParsingLs)、ありがとう。 –
@gniourf_gniourfは、 'ls'の解析や' goto'の使用などのルールについては宗教的ではありません。場合によっては、これらのソリューションが最適な場合もあります。 –
これはそのようなケースの1つではありません。 'find。 -print0 | grep -z '\ .jar $' 'は、あなたが' --ignore'やBashの拡張グロブリングを使いたくない場合でもうまく動作します。つまり、ほとんどの人はルールやそれを理解するために記事全文を読んでほしくないと言っています。コメントの代わりに 'find -print0'と' grep -z'を代わりに使用してください。 –
になり、あなたはこのような何かを行うことができますが、それは少しやり過ぎだ:
find . -maxdepth 1 ! -name '*.jar'
find
ファイルを検索します。 .
引数は、現在のディレクトリである.
から検索を開始することを指定します。 -maxdepth 1
は、あるレベルの深い、つまり現在のディレクトリだけを検索したいと伝えます。 ! -name '*.jar'
がと一致しないすべてのファイルを正規表現*.jar
と照合します。
私が言ったように、このアプリケーションではちょっと残念ですが、-maxdepth 1
を削除すると、再帰的にすべての非jarファイルや簡単に検索できます。
リトル知られているbashの拡張ルール:
ls !(*.jar)
bash:!:イベントが見つかりません。私が必要なものは何? – paislee
コマンドラインで 'shopt -s extglob'を実行してから、コマンドを入力してみてください。 –
利用のegrepスタイルの拡張パターンマッチング。
ls !(*.jar)
これはbash-2.02-alpha1から利用可能です。 は、最初にデフォルトでこれを有効にする設定オプションがあるのbash-4.1-αのとおり
shopt -s extglob
を有効にする必要があります。
shopt -s extglobに言及してくれました! –
これは正解です。正しいとマークされた答えはシェルを直接使用せず、補助コマンドを使用します。 – dbn
@dbw - 私はこの答えがもっと好きでも、受け入れられた答えは質問のために大丈夫です。 OPは、「シェルを直接使用する」ことを特に要求していません。 –
POSIXは、一致しないブラケット式を定義しているので、シェルがファイル名を展開できるようにすることができます。
ls *[!j][!a][!r]
これにはいくつかの癖がありますが、少なくともそれはすべてのUNIXシェルと互換性があります。
POSIX準拠の場合+1。エイリアスと組み合わされた小さなbash/python/ruby関数。 "lsnot"は簡単に実行可能にすることができます。 – Nikkolasg
これは3文字より短いものと一致しません。 –
複数のファイル拡張子を除外する場合は、ls test/!(*.jar|*.bar)
のようにパイプ|
で区切ります。のは、それを試してみましょう:
$ mkdir test
$ touch test/1.jar test/1.bar test/1.foo
$ ls test/!(*.jar|*.bar)
test/1.foo
他の回答を見ると、あなたが最初shopt -s extglob
する必要があるかもしれません。
これを '!(*。[bj] ar)'に短縮することができます。 –
これはおそらくregexとラベル付けされるべきではなく、*はシェルグロブワイルドカードであり、正規表現*ではありません。これは「0以上の量子」です。 – sweaver2112
良い点ですが、私はregexの使用がおそらくあなたが期待するマッチを得るためのより良い習慣であることを学んでいます。 – paislee