同じベースファイル名を持つ複数のファイルがあります。1つを除くすべてを削除したい
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
保持する必要がなければ、を使用できることを知っていますrm foo.*
。
TLDPは^
、一致を否定することを示します。試行錯誤を通して、私はそれを見つけることができました
rm foo.*[^org]
私は必要なことをしますが、私は本当に構文を理解していません。
また、私のユースケースの制限ではありませんが、このパターンはfoo.o
and も無視すると思いますfoo.or
。どのように、どのような無視はグロブこのパターンの仕事でしょうないことだけ foo.org
のように見えますか?
を使用してい
—
マスカロ氏14年
Regular Expression
ます。グループ化文字に注意する必要があります。ブラケットを使用することにより、あなたは文字で拡張子を持っていたすべてのファイルを削除してしまうことを意味文字クラスを指定したo
、r
またはg
任意の順序インチ 括弧を使用してグループを作成し、文字の順序を保持します。
@ jbarker2160-これは実際には正規表現ではなく、グロブ(またはファイル名パターン)と呼ばれますが、これは多かれ少なかれ正規表現のサブセットです-詳細については、bashのマンページのパターン一致セクションを参照してください。彼のパターン
—
ジョニー14年
foo.*[^org]
はfoo.
、ドットの後の1つ以上の文字で始まり、最後の文字がo、r、またはg でないファイル名と一致します。したがって、一致foo.orb
しますが、foo.org
or foo.or
またはor は一致しませんfoo.o
。GlennJackmanの答えは、拡張パターンマッチング機能を有効にして一致を無効にする方法を示しています。
rm foo.*[^org]
すべてのファイル削除し、最後の文字がどちらもされていないo
、r
またはg
、そのfoo.foo
いずれかと一致しませんが。