Bashワイルドカードは、特定の拡張子を持つファイルを除くすべてのファイルと一致し、ドット文字を含むファイル名で機能します。

Bashワイルドカードは、特定の拡張子を持つファイルを除くすべてのファイルと一致し、ドット文字を含むファイル名で機能します。

私はオーディオファイルで作業しています。ほとんどはmp3ファイルですが、すべてではありません。 mp3以外のファイルや拡張子のないファイルに対していくつかのコマンドを実行したいと思います.mp3

私は正規表現には上手ですが、ファイルのグロービングにはあまり上手ではないと思います。

私はBashがこれを行うことができる「拡張ワイルドカード」を持っているという他のSO&SEの回答を見て学びました。

file ../foo/bar/*.!(mp3)

しかし、私のファイル名には、ファイル拡張子を構成する点に加えて点が含まれています。

../foo/bar/Naked_Scientists_Show_19.10.15.mp3
../foo/bar/YWCS_ep504-111519-pt1_5ej4_41cc9320.mp3_42827d48daefaa81ec09202e67fa8461_24419113.mp3
../foo/bar/eLife_Podcast_19.09.26.mp3
../foo/bar/gdn.sci.080428.bg.science_weekly.mp3

グローバルマッチは最後のポイントではなく、最初のポイントから始まるようです。ドキュメントを見てみましたが、正規表現ほど強力ではないようです。しかし、私は* nixシェルを扱うのに多くの時間を費やしていなかったので、すべてを実際に理解することはできませんでした。

Bashワイルドカードでこれを行う方法はありませんか?そうでない場合は、検索や他のツールを使用して同じ結果を得る方法を知ることはまだ価値があります。

ベストアンサー1

*.!(mp3)foo.bar.mp3その後foo.には次のものがあるので一致しますbar.mp3いいえmp3

!(*.mp3)ここでで終わらないすべての項目と一致します.mp3

.名前に少なくとも1つ(隠しファイルで作成された先行ファイルを除く)が含まれているが終わらないファイルを一致させるには、.mp3次のようにします!(*.mp3|!(*.*))

とにかく、bash--enable-extended-glob-defaultshopt -s extglob

おすすめ記事