1. ホーム
  2. bash

[解決済み] findで正規表現によるファイル名検索をする方法

2023-01-22 21:25:42

質問

日付のあるファイル、3日以上前のファイルをすべて探そうとしています。

find /home/test -name 'test.log.\d{4}-d{2}-d{2}.zip' -mtime 3

何も表示されません。何が問題なのでしょうか?

どうすればよいのでしょうか?

find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3

  1. -name 用途 グローブラー 式を使用します。 別名ワイルドカード。必要なのは -regex
  2. 間隔を意図したとおりに使うには に伝える必要があります。 find を使うように 拡張された 正規表現 を経由して -regextype posix-extended フラグ
  3. ピリオドをエスケープする必要があります。 なぜなら、正規表現ではピリオドは という特別な意味を持つからです。 という特別な意味を持つからです。 文字 . あなたが欲しいのは で示されるリテラルピリオドです。 \.
  4. であるファイルのみにマッチするように より大きい 3 日以上前のものだけにマッチさせるには、番号の前に + として で -mtime +3 .

コンセプトの証明

$ find . -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip'
./test.log.1234-12-12.zip