POSIX機能のみを使用してシェルからファイル変更時間を取得できますか?秒単位のUnixタイムスタンプを使用することをお勧めします。
私が見つけることができるすべてはそれを使用しますstat(1)
が、POSIXには定義がないようです。可能ですか?
ベストアンサー1
残念ながら、POSIX CLI(シェルおよびユーティリティ)インターフェイスはシステムコールだけでありlstat()
、stat()
その出力を確実に後処理することはできません。ls
1つの方法は、コマンドとその形式をpax -x ustar
指定してそれを含むファイルを生成し、そのファイルからタイムスタンプを抽出することです。pax
ustar
tar
echo "$((0$(pax -x ustar -wd -- "$file" |
dd 2> /dev/null bs=4 skip=34 count=3 | tr -d '\0')))"
mtime
オフセット136に8進数で格納されます。
ただし、US-tar形式のすべての制限により妨げられます。
最善の方法は、次を使用することperl
ですpython
。
perl -MPOSIX -le '
for (@ARGV) {
if (@s = lstat$_) {print $s[9]} else {warn "$_: $!\n"}
}' -- "$file"
(多くの最新システムで利用可能なナノ秒は含まれていません。たとえば、モジュールを介して入手できますが、Time::HiRes
これは最新バージョンでインストールされているとします。)