ファイル情報。
成果物
情報源
File::Stat
ファイルの情報を格納したオブジェクトのクラス。
FileTest に同名のモジュール関数がある場合はそれと同じ働きをします。ただ、ファイル名を引数に取るかわりに Stat 自身について判定する点が違います。
p File::Stat.new($0).directory? #=> false p FileTest.directory?($0) #=> false
1.8 以降では、属性メソッドがシステムでサポートされていない場合 nil が返ります。なお、1.7 以前では 0 が返っていました。
dev デバイス番号(ファイルシステム) dev_major dev の major 番号部 dev_minor dev の minor 番号部 ino i-node 番号 mode ファイルモード nlink ハードリンクの数 uid オーナーのユーザID gid オーナーのグループID rdev デバイスタイプ(スペシャルファイルのみ) rdev_major rdev の major 番号部 rdev_minor rdev の minor 番号部 size ファイルサイズ(バイト単位) blksize 望ましいI/Oのブロックサイズ blocks 割り当てられているブロック数 atime 最終アクセス時刻 mtime 最終更新時刻 ctime 最終状態変更時刻(状態の変更とは chmod などによるもので、Unix では i-node の変更を意味します)
メンバ抜粋
特異メソッド
new
インスタンスメソッド
<=> atime birthtime blksize blockdev? blocks chardev? ctime dev dev_major dev_minor directory? executable? executable_real? file? ftype gid grpowned? ino mode mtime nlink owned? pipe? rdev rdev_major rdev_minor readable? readable_real? setgid? setuid? size size? socket? sticky? symlink? uid world_readable? world_writable? writable? writable_real? zero?
new
new(path) -> File::Stat
path に関する File::Stat オブジェクトを生成して返します。 File.stat と同じです。
ならFile.stat
でいいじゃんね。
p $:[0] #=> 例 # "C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8" p File::Stat.new($:[0]) #=> 例 #<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=0, blksize=nil, blocks=nil, atime=Sun Sep 02 14:15:20 +0900 2007, mtime=Tue Apr 24 23:03:44 +0900 2007, ctime=Tue Apr 24 23:03:37 +0900 2007>
atime
, ctime
, mtime
, birthtime
メソッド | 意味 |
---|---|
birthtime |
ファイル作成日時 |
atime |
最終アクセス日時 |
ctime |
最終状態変更日時(chmod 等) |
mtime |
最終更新日時 |
残念ながら2021年ラズパイOSではbirthtime
が取得できない。
$ touch a.txt $ stat a.txt File: a.txt Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: 31h/49d Inode: 435 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ pi) Gid: ( 1000/ pi) Access: 2021-11-09 10:19:27.711385689 +0900 Modify: 2021-11-09 10:19:27.711385689 +0900 Change: 2021-11-09 10:19:27.711385689 +0900 Birth: -
$ stat --version stat (GNU coreutils) 8.30 Copyright (C) 2018 Free Software Foundation, Inc. ...
未だに実装されていないとか時代遅れにもほどがある。
そもそもサーバなど異なるファイルシステム間においてStat情報が共有できない。OSやファイルシステム差異のせいでクロスプラットフォームに扱えない情報。すごくダサい。
<=>
ファイル最終更新日時mtime
を比較する。
size
ファイルサイズをバイト単位で返す。
file?
, directory?
, symlink?
ファイル種別がそれなら真を返す。
所感
必要になったらもっと詳しく勉強すればいい。たぶんそんなに必要ない。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux