Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!honnetnews!fiasapnews!fiaskry!topic.ad.jp!perikan.aso.ecei.tohoku.ac.jp!yagi!yagi.ecei.tohoku.ac.jp!kabe
From: <kabe@sra-tohoku.co.jp>
Newsgroups: fj.unix.shells
Subject: ファイルの完全な mtime を得る (2)
Date: 1 Nov 2002 07:13:23 GMT
Organization: personal
Lines: 63
Message-ID: <2409301200215.msgid221150@sra-tohoku.co.jp>
References: <42042703200210.msgid27193@sra-tohoku.co.jp>
	<3DBBC46B.B3CF048@coral.ocn.ne.jp>
	<aph2oo$2qdp$1@maha2.doga.co.jp>
	<205028200215.msgid381026@sra-tohoku.co.jp>
NNTP-Posting-Host: masamune.bio.is.tohoku.ac.jp
Content-Type: text/plain; charset=ISO-2022-JP
X-Trace: yagi.ecei.tohoku.ac.jp 1036134803 7643 130.34.233.159 (1 Nov 2002 07:13:23 GMT)
X-Complaints-To: usenet@yagi.ecei.tohoku.ac.jp
NNTP-Posting-Date: 1 Nov 2002 07:13:23 GMT
X-Newsreader: mnews [version 1.22PL4] 2000-05/28(Sun)
Xref: ccsf.homeunix.org fj.unix.shells:100

ネタ切れのようなのでとりあえずまとめます。

お題：
ls -l でファイルの更新時刻を取ろうとしても、
６ヶ月以上前のものは "%b %d %Y" になってしまい時刻まで取れません。
shell+汎UNIXなコマンドで完全なmtimeを得られるか？
(perlや専用バイナリ作成は反則とする)

▼直接法

・自明な解(環境依存)：
	NetBSD: ls -T
	GNU ls: ls --full-time

・diff -c を使う
	<apikru$if1$1@caraway.media.kyoto-u.ac.jp>

 	diff -c ファイル名 /dev/null | head -1

	ctime() のようなので出力の環境依存は少なそう
	汎用には空ファイルやバイナリ対応が課題

・pr のヘッダを見る
	<apikru$if1$1@caraway.media.kyoto-u.ac.jp>

	pr ファイル名 | head -3

	HH:MMまで
	
・tar tvf の出力を使う
	<3DBBC46B.B3CF048@coral.ocn.ne.jp>

	tar cf - file | tar tvf -

	環境によっては秒までとれない
	大きなファイルでは嬉しくない
	→ddで切る、touch -rで小さいファイルを作って使う

・tar の出力を直接解析
	<hvo3cqpki6m.fsf@flux.a02.aist.go.jp>

	tar cf - filename|dd bs=1 skip=136 count=12

	8進数の time_t を年月日時分秒に戻せるかが課題

▼間接法

・TZを秒単位でずらしてlsの出力を比較する
	TZ自体をサポートしてないと…

・HH:MMまでは tar (ar) で得て、残りは秒だけずらした ar ファイルを
  でっちあげてar tv の変化点を見て秒を得る
	<hvon0oxiidp.fsf@flux.a02.aist.go.jp>

落とし穴：
・touch -r (mtimeの同じファイルを作る)は 4.4BSD-Lite以降のみ。
  SunOS4とかでは使えない。
・touch -t (mtimeを偽造する)は使えない環境や秒まで指定できない環境がある
・tar tvf は秒が出るものと出ないものがある
・UNIX 7th ed. でも使える方法はないかもしれない

-- 
kabe
