シェルスクリプトの単体試験で時々使用するのでメモしておきます。
実施環境:
Linux
[testuser@testhost ~]$ uname -a
Linux testhost 4.18.0-147.8.1.el8_1.x86_64 #1 SMP Thu Apr 9 13:49:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[testuser@testhost ~]$ echo $SHELL
/bin/bash
日付付きのダミーログファイルを作成する場合、1つ2つであればtouchコマンドを使用して次のように簡単に作成できます。
Linux
[testuser@testhost ~]$ touch -t 202106010900 test.log.20210601
[testuser@testhost ~]$ ls -l
-rw-r--r-- 1 testuser testgrp 0 Jun 1 09:00 test.log.20210601
上記は日付をピンポイントで指定していますが、「今日から3日前」のように日付を相対的に指定する場合、dateコマンドを利用して次のように書けます。
Linux
[testuser@testhost ~]$ date
Sun Jun 6 13:41:14 JST 2021
[testuser@testhost ~]$ touch -t `date -d "3 days ago" +%Y%m%d0900` test.log.`date -d "3 days ago" +%Y%m%d`
[testuser@testhost ~]$ ls -l
-rw-r--r-- 1 testuser testgrp 0 Jun 3 09:00 test.log.20210603
ただ、大量のダミーログファイルを作成する場合、これらのコマンドを単に1つずつ入力していくのは非常に大変です。
ではどうするかというと、for文を利用します。
以下の例では昨日から1週間前までの分のダミーログファイルを作成しています。
Linux
[testuser@testhost ~]$ date
Sun Jun 6 13:48:30 JST 2021
[testuser@testhost ~]$ for ((i=1;i<=7;++i)); do touch -t `date -d "$i days ago" +%Y%m%d0900` test.log.`date -d "$i days ago" +%Y%m%d`; done
[testuser@testhost ~]$ ls -l
-rw-r--r-- 1 testuser testgrp 0 May 30 09:00 test.log.20210530
-rw-r--r-- 1 testuser testgrp 0 May 31 09:00 test.log.20210531
-rw-r--r-- 1 testuser testgrp 0 Jun 1 09:00 test.log.20210601
-rw-r--r-- 1 testuser testgrp 0 Jun 2 09:00 test.log.20210602
-rw-r--r-- 1 testuser testgrp 0 Jun 3 09:00 test.log.20210603
-rw-r--r-- 1 testuser testgrp 0 Jun 4 09:00 test.log.20210604
-rw-r--r-- 1 testuser testgrp 0 Jun 5 09:00 test.log.20210605
少々長いコマンドですが、1つ1つ手入力するよりは圧倒的に楽になります。
数値やオプションを変更すれば、より長い期間のダミーログファイルを作成することや、日付付きでなく連番のファイルを作成することも可能です。