POSIXシェルからファイル変更時間を取得する

POSIXシェルからファイル変更時間を取得する

POSIX機能のみを使用してシェルからファイル変更時間を取得できますか?秒単位のUnixタイムスタンプを使用することをお勧めします。

私が見つけることができるすべてはそれを使用しますstat(1)が、POSIXには定義がないようです。可能ですか?

ベストアンサー1

残念ながら、POSIX CLI(シェルおよびユーティリティ)インターフェイスはシステムコールだけでありlstat()stat()その出力を確実に後処理することはできません。ls

1つの方法は、コマンドとその形式をpax -x ustar指定してそれを含むファイルを生成し、そのファイルからタイムスタンプを抽出することです。paxustartar

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これは最新バージョンでインストールされているとします。)

おすすめ記事