bash拡張グロブ-プレフィックスなしのファイルに一致


13

fail2ban刑務所のファイル名を一致させようとしています-そのため、ファイル名のグロビングのみを使用する必要があります-正規表現やbashスクリプトは使用しません。

私の/var/log/apache2ディレクトリには、次のファイルが含まれます。

example.com.error.log
db.example.com.error.log
app1.example.com.error.log
app2.example.com.error.log

.error.log 除く すべてのファイルに一致するグロブを作成しようとしていますdb.example.error.log-これは可能ですか?

試しました!(db)*.error.logが、これはまだ一致していdb.example.com.error.logます。私は推測している!()可能、何の文字に一致されていない*ファイル名の先頭から一致します。

注:新しいappXログファイルが追加されたときにグロブを拡張する必要はないため@()、現在知られている非dbファイル名のリストでは使用できません。

(背景:db.example.com を除くすべてのドメインでphpMyAdmin URLを要求する人を禁止するフィルターを作成したい)

回答:


18

拡張ファイル名グロブパターン(でサポートされているbashextglobシェルオプションは、によっても活性化され、ksh93

!(db*).error.log

で始まるものはすべて無視されdbます。

具体的には:

!(db.example.com).error.log

これは、正確にで始まる現在のディレクトリ内の名前を無視しますdb.example.com

!(db.example.com)パターンは「特別のような役割を果たし*た文字列と一致しません」db.example.com


あなたのパターン、

!(db)*.error.log

除外で始まる任意の名前dbが、ことができます任意の明らかに含まれているの後の文字列を、db

上記と同様に、!(db)「のように*」動作しますがdb、正確な文字列に一致せず、**.error.log いわばパターンを残します(最初*は「特別」です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.