なんとなく常識として知ってるつもりだったけどあやふやだったファイル・ディレクトリのタイムスタンプについて

  • 7
    Like
  • 0
    Comment
More than 1 year has passed since last update.

LinuxとかUnix系のOSでls -lで出てくるタイムスタンプ、ファイルが変更されたら変更されるんでしょくらいにしか思ってなかったけど、実際完全に知らなかったので確認した
MacOSXで確認しました
Linux系はどうかあんまり確信ないけどもしこれと違ったら教えて下さい
あと、Windowsではどうなのかとかも確認してない

ls -lをやるのはだるすぎるのでtree --timefmt %H:%M:%Sで確認した

$ tree --timefmt %H:%M:%S .
.
└── [22:01:16]  d1
    ├── [22:01:46]  d2
    │   └── [22:01:46]  f1
    └── [22:01:16]  d3

現在、このようになっているとする

$ touch d1/f2
$ tree --timefmt %H:%M:%S .
.
└── [22:03:53]  d1
    ├── [22:03:53]  f2
    ├── [22:01:46]  d2
    │   └── [22:01:46]  f1
    └── [22:01:16]  d3

$ touch d1/d3/f3
$ tree --timefmt %H:%M:%S .
.
└── [22:03:53]  d1
    ├── [22:03:53]  f2
    ├── [22:01:46]  d2
    │   └── [22:01:46]  f1
    └── [22:04:48]  d3
        └── [22:04:48]  f3

$ echo "aa" > d1/d2/f1
$ tree --timefmt %H:%M:%S .
.
└── [22:03:53]  d1
    ├── [22:03:53]  f2
    ├── [22:01:46]  d2
    │   └── [22:06:26]  f1
    └── [22:04:48]  d3
        └── [22:04:48]  f3

$ rm -rf d1/d2/f1
$ tree --timefmt %H:%M:%S .
.
└── [22:03:53]  d1
    ├── [22:03:53]  f2
    ├── [22:07:06]  d2
    └── [22:04:48]  d3
        └── [22:04:48]  f3

$ mv d1/d3/f3 d1/d2
$ tree --timefmt %H:%M:%S .
.
└── [22:03:53]  d1
    ├── [22:03:53]  f2
    ├── [22:08:02]  d2
    │   └── [22:04:48]  f3
    └── [22:08:02]  d3

上記の結果より、

  • ファイルのタイムスタンプはファイルが追加・編集されたときに変更される
  • ファイルの追加・削除時はそのファイルの存在するディレクトリのみのタイムスタンプが変更される
  • ファイルを移動したときは、そのファイルの移動元と移動先のディレクトリそれぞれのタイムスタンプが変更され、移動されるファイルのタイムスタンプは変更されない

って感じ!意外と知らなかったりすることがあってはずかしー