私はFail2ban刑務所のファイル名を一致させようとしています。したがって、正規表現やbashスクリプトではなくファイル名globbingを使用する必要があります。
私の/var/log/apache2
ディレクトリには、以下を含むファイルが含まれています。
example.com.error.log
db.example.com.error.log
app1.example.com.error.log
app2.example.com.error.log
次に終わるすべてのファイルに一致するglobを作成しようとしています。.error.log
とは別に db.example.error.log
- 可能ですか?
私はそれを試しましたが、!(db)*.error.log
これはまだ一致していますdb.example.com.error.log
。ファイル名の先頭から一致を!()
許可する文字が一致しないようです。*
注:新しいログファイルを追加するときにglobを拡張したくないため、現在知られているデータベース以外のファイル名のリストはappX
使用できません。@()
(背景:すべてのドメインのphpMyAdmin URLを要求することを禁止するフィルタを作成したいと思います。とは別にdb.example.com)
答え1
bash
拡張ファイル名グロービングモード(有効なシェルオプションとサポートextglob
されています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)
「like」の動作は*
正確な文字列と一致しないため、db
パターンが残ります。**.error.log
あなたはそう言うことができます(最初は*
「特別」です)。