シェルプログラミング - ダミーのファイルを作りたい

環境:macOS Monterey version 12.6.1

$ bash -version | head -n 1
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin21)

何らかの理由で、大量のファイルを作成したい場合があります。

大抵は、touchを使って作りるのがいいと思います。

touch 001.txt

大量に作る場合は、以下のようにしてコマンドラインにペーストすればOKです。

touch 001.txt
touch 002.txt
touch 003.txt
touch 004.txt
touch 005.txt

作成時刻を指定してファイルを作成することもできます。

「2022-01-01 00:00」 でファイルを作成しました。

$ touch -h
usage: touch [-A [-][[hh]mm]SS] [-achm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]]
       [-d YYYY-MM-DDThh:mm:SS[.frac][tz]] file ...

$ touch -t 202201010000 sample.txt

$ ls -al sample.txt
-rw-r--r--  1 user1  staff  0  1  1  2022 sample.txt

補足ですが、
この時に指定した時刻は…以下のようになりました。

ctimeだけ現在の日時になりますが、mtime,atimeは指定した日時になります。

  • mtime : 変更日時

  • atime : アクセス日時

  • ctime : 属性の変更日時

$ touch -t 202201010000 sample.txt

$ ls -al sample.txt
-rw-r--r--  1 user1  staff  0  1  1  2022 sample.txt

$ ls -cl sample.txt
-rw-r--r--  1 user1  staff  0 11 19 17:49 sample.txt

$ ls -ml sample.txt
-rw-r--r--  1 user1  staff  0  1  1  2022 sample.txt
 

大抵は一度作成すればたりるのでここまでわかれば大丈夫そうです。

後やりたいことは….

ファイル名やファイルの作成時刻を変えながら多数のファイルを作成したい。

Shellでやろうとすると、時刻計算が…

なので、EXCELとかでtouchコマンドを整形してしまうのが早いと思います。

が…

少し考えます。

# 2022-03-03 00:00 でファイルを作成
CDATE=202203030000
touch -t ${CDATE} sample03.tmp

こっちの方がわかりやすいかな

touch -d 2022-04-04T00:00:00 sample04.tmp

シェルにすると

CDATE=2022-04-04T00:00:00
touch -d ${CDATE} sample04.tmp

現在の日時は

CDATE=`date`
echo ${CDATE} # 2022年 11月19日 土曜日 18時16分16秒 JST

日時をフォーマットして出力

CDATE=`date +%Y-%m-%dT%H:%M:%S`
echo ${CDATE} # 2022-11-20T18:37:35

日時の計算

… あれっ…以下のコード動かない…

$ date --date "-1 month"

動いたら…以下のようなイメージだったのですが…
1ヶ月後の日付は以下のように取得できたのですが…

CDATE=`date --date "-1 month" "+%Y%m%d"`

シェルの種類によって違うんだな…

-1 yearm -1 month -1 dayとかで指定したような気もしたのですが…

バージョン違いによるものなんでしょうか?
ヘルプを表示してオプションを調べます。

以下は、1年2ヶ月と3日後の日付を取得しています。

CDATE=`date -v-1y -v-2m -v-3d '+%Y/%m/%d (%a)'`
echo ${CDATE}

5日前までの日付を取得する

for i in `seq 1 5`
do
  # CDATE=`date -v-1d '+%Y-%m-%d %h:%M'` # 022-11-19 11:12
  # CDATE=`date -v-1d '+%Y-%m-%d %H:%M'` # 022-11-19 23:12
  # CDATE=`date -v-${i}d '+%Y-%m-%dT%H:%M'` # 2022-11-19T23:17
  CDATE=`date -v-${i}d '+%Y-%m-%dT00:00'` # 時刻は00:00にする
  echo ${CDATE}
done

----- OUTPUT -----
2022-11-19T00:00
2022-11-18T00:00
2022-11-17T00:00
2022-11-16T00:00
2022-11-15T00:00

5前から今日までの日付のファイルを作成
やっとやりたかったことができた。


# 2022-02-03 00:00 でファイルを作成
# CDATE=2022-04-04T00:00:00
# touch -d ${CDATE} sample04.tmp

# 日付を保存 Linux系のbashの場合
# CDATE=`date`
# CDATE=`date --date "-1 month" "+%Y%m%d"`
# CDATE=`date +%Y-%m-%dT%H:%M:%S`
# echo ${CDATE}

# sample001.tmp から sample005.tmpのファイルを作成
for i in `seq 1 5`
do
  # CDATE=`date -v-1d '+%Y-%m-%d %h:%M'` # 022-11-19 11:12
  # CDATE=`date -v-1d '+%Y-%m-%d %H:%M'` # 022-11-19 23:12
  # CDATE=`date -v-${i}d '+%Y-%m-%dT%H:%M'` # 2022-11-19T23:17
  CDATE=`date -v-${i}d '+%Y-%m-%dT00:00:00'` # 時刻は00:00にする
  echo ${CDATE}
  WK_NUM=$(printf "%03d\n" "${i}") # 0 -> 000にする
  touch -d ${CDATE} sample${WK_NUM}.tmp
done
$ ls -al *00*.tmp
-rw-r--r--  1 user1  staff  0 11 19 00:00 sample001.tmp
-rw-r--r--  1 user1  staff  0 11 18 00:00 sample002.tmp
-rw-r--r--  1 user1  staff  0 11 17 00:00 sample003.tmp
-rw-r--r--  1 user1  staff  0 11 16 00:00 sample004.tmp
-rw-r--r--  1 user1  staff  0 11 15 00:00 sample005.tmp

よく考えたらファイル名を日付にするとわかりやすいので修正します。

for i in `seq 1 5`
do
  # CDATE=`date -v-1d '+%Y-%m-%d %h:%M'` # 022-11-19 11:12
  # CDATE=`date -v-1d '+%Y-%m-%d %H:%M'` # 022-11-19 23:12
  # CDATE=`date -v-${i}d '+%Y-%m-%dT%H:%M'` # 2022-11-19T23:17
  CDATE=`date -v-${i}d '+%Y-%m-%dT00:00:00'` # 時刻は00:00にする
  FILENAME=`date -v-${i}d '+%Y%m%d'` # 
  #echo ${CDATE}
  # WK_NUM=$(printf "%03d\n" "${i}") # 0 -> 000にする
  touch -d ${CDATE} ${FILENAME}_sample.wk
done
$ ls -alT *.wk
-rw-r--r--  1 user1  staff  0 11 15 00:00:00 2022 20221115_sample.wk
-rw-r--r--  1 user1  staff  0 11 16 00:00:00 2022 20221116_sample.wk
-rw-r--r--  1 user1  staff  0 11 17 00:00:00 2022 20221117_sample.wk
-rw-r--r--  1 user1  staff  0 11 18 00:00:00 2022 20221118_sample.wk
-rw-r--r--  1 user1  staff  0 11 19 00:00:00 2022 20221119_sample.wk

いいなと思ったら応援しよう!