LoginSignup
1
2

More than 5 years have passed since last update.

ファイル作成時間の偽装

Last updated at Posted at 2016-04-01

概要

期限切れのファイルを削除するようなスクリプトをテストするため、ファイルの作成日時を偽装する方法について調べた。まとめると下記の通り。

  • 作成日時を偽装するには touch -t 'YYYYMMDDhhmm' hoge.txt
  • 作成日時を確認するには
    • coretuils あり ls -lt --time-style=long-iso
    • coretuils なし ls -lT

詳細

もっと具体的な例や、表示結果については以下に書く。

ファイル作成時間の偽装

touch コマンドのオプション -t を使えば過去または、未来の作成日時を持つファイルを作ることができる。使い方は下のコードを参照。man touch を見ればもっと詳しく書いてある。

# 1999年4月1日0時0分のファイル作成
touch -t '199904010000' hoge.txt

# 上と同じファイルを作成(年を2桁で書く)
# 但し、ルールが特殊(1969年〜2068年で解釈する)ので、使わないほうが良さそう。
touch -t '9904010000' hoge.txt

# 今年4月1日0時0分のファイル作成
touch -t '04010000' hoge.txt

ファイル作成日時の確認

確認する際は、ls のオプションを使う。GNU ls と BSD ls でオプションが異なる。環境によって違うのでとりあえず両方試してみたら良いと思う。mac の場合はデフォルトでは BSD ls しか入ってないので GNU ls が使いたければ「homebrew でMacコマンドをLinuxのGNU風に置換する」を参考に coreutils をインストールすれば良い。

ls -lT
# -rw-r--r--  1 user  staff     0  4  1 00:00:00 1999 hoge.txt

ls -l --time-style=long-iso
# -rw-r--r-- 1 user staff    0 1999-04-01 00:00 hoge.txt

ファイル作成スクリプト

最後に、テストするための作ったスクリプトを載せておく。下のコードを実行すると、過去10日分の空ファイルを作成する。ここで使っている date -d は GNU のバージョンでないと利用できない。

for i in {0..9}
do
  stamp=`date -d "$i days ago" +%m%d0000`
  touch -t $stamp "hoges_$i.txt"
done

# ワンライナー版
for i in {0..9}; do touch -t `date -d "$i days ago" +%m%d0000` hoge_$i.txt; done
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2