bash 拡張 glob - プレフィックスなしでファイルを一致させる

bash 拡張 glob - プレフィックスなしでファイルを一致させる

私は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 あなたはそう言うことができます(最初は*「特別」です)。

関連情報