役に立つかどうかわからない豆知識です。
例えば、Linuxでログファイルを格納しているフォルダ内に、ログローテート等で末尾に日付入りのファイルが生成されたり、日次で日付入りのバックアップファイルが生成されるとしましょう。
そして、ファイル名に今日の日付を含むファイルをカウントしたい場合、どのようなコマンドでカウントした結果を取得できるか調べてみました。
目次
今日の日付入りファイルをカウント
まず、意図した結果を出力するには3種類のコマンドが必要だとわかりました。
- ファイル一覧を取得
- 日付でファイルを絞り込む
- 結果をカウントする
それでは、順を追って説明しましょう。
ファイル一覧を取得
特定のフォルダ以下のファイル一覧を取得する方法は、特に説明する必要はありませんよね。
Linux初心者でも誰もが知っている「ls」や「ll」コマンドを使えば良いです。
今回はファイル数のカウントを目的としているので、特にオプションを付けなくてもファイル名が表示されれば十分です。
1 2 |
# ls # ll |
日付で絞り込む
上記で取得したファイル一覧をお馴染みの「grep」で絞り込むのですが、単純な「date」コマンドだと使えないので、日付のフォーマットを「YYYYMMDD」で指定する必要があります。
1 2 |
# date +%Y%m%d 20211223(YYYYMMDD) |
これを先程のファイル一覧から絞り込むと、このような感じになります。(例:syslog)
1 |
ls -l /var/log/ | grep syslog.`date +%Y%m%d` |
結果をカウントする
こちらもお馴染みの「wc」コマンドを使います。(トイレじゃないよ~)
そのまま使うと、単語数やらバイト数など必要ない情報まで取得しちゃいますので、「-l」オプションでファイル数(厳密には上記で絞り込んだファイル一覧の行数)のみ出力します。
これらを合わせると今日の日付を含むファイルをカウントすることができます!
1 |
# ls /var/log/ | grep syslog.`date +%Y%m%d` | wc -l |
まとめ
これで何がしたいかというと、バックアップが正常に取得できたかを自動で確認する際に、Zabbixの「system.run」キーに設定して監視したりします。
1 |
system.run[ls /mnt/nas/backup/ | grep backup_data_`date +%y%m%d` | wc -l] |
何かと便利に使えるので、ぜひお試しあれ!
コメント