任意の数字で終わるログファイルのキャプチャ

任意の数字で終わるログファイルのキャプチャ

".log.[すべての数字]で終わるすべてのログをキャプチャしようとしています。

だから私はこの構文を作りました。

find .  -type f  -regex '^.log.*[0-9]$' -print

command does not give any output 

ただし、以下のファイルはキャプチャされません。 (予想結果)

  controller.log.2018-01-03-01  
  server.log.2017-10-31-03
  server.log.2018-01-23-11
  server.log.2018-04-06-17  
  server.log.2018-07-07-05
  controller.log.2018-01-03-02  
  log-cleaner.log.10           
  server.log.2017-10-31-04 
  server.log.2018-01-23-12  
  server.log.2018-04-06-18 
  server.log.2018-07-07-06
  controller.log.2018-01-03-03 
  log-cleaner.log.2   
  server.log.232.434

私の文法に問題があるのでしょうか?

ベストアンサー1

-regex(GNU拡張は他のfindいくつかの実装でも認識されていますが、かなりの違いがあります。)-pathワイルドカードの代わりに正規表現を使用することを除いて、同様です。名前だけでなく、完全なファイルパスと一致します。

したがって、.*\.log.*[0-9](必須^ではありませんが$暗黙的にfind)一致しますが、キャプチャされた項目も-regex一致します。./dir/foo.log-3./foo.logic/file.bz2.*ic/file.bz

-name一致ファイル名前ワイルドカードのみが使用されますが、対応する正規表現はありません。ここでは名前に数字が含まれています。.logで終わるファイルには正規表現は必要ありません。-name '*.foo*[0-9]'

正規表現を使用して同じことを実行できます。つまり、最後の数字の間の部分に何も含まれないようにして、ファイル名とのみ一致することを-regex '.*\.log[^/]*[0-9]'確認します。.log/

特に、一部のBSDまたはGNUで使用する-regexために拡張正規表現を有効にする場合は、パターンをさらに指定できます。-Efind-regextype posix-extendedfind

find . -regextype posix-extended -regex '.*\.log([.-][0-9]+)+' # GNU
find -E . -regex '.*\.log([.-][0-9]+)+' # BSD

これは、on.logの後に1つ以上のものが続くものと.<number>一致します-<number>

-regextype posix-extendedGNUのないfind正規表現はEmacs正規表現、標準基本正規表現と標準拡張正規表現のいくつかの混合(サポートされていますが、グループ化が代わりに+使用されます)\(...\)(...)

標準の基本正規表現である-EBSD正規表現はありません。find

おすすめ記事