• ベストアンサー

シェルスクリプトでの時間合わせ

以下の処理を、シェルスクリプトを使って自動化しようと思っています。 作成日が現在日時ではないファイルを、たくさん作成するスクリプトです。 1、現在日時を変更 ↓ 2、ファイルをたくさん作成 ↓ 3、現在日時を正しいものに戻す この、現在日時を正しいものに戻す処理をどのように行おうか迷っています。 ちなみに、インターネットは外部に繋がっていないので、 外部ntpサーバを使用しての時刻合わせはできません。 また、ファイル作成処理に時間がかかる事が予想できるので、 処理開始時に現在時刻を覚え、終了時にその時間に戻した場合は、 (作成処理時間分)時刻がずれてしまう懸念があります。 なにかいい方法があったら教えてください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

考え方だけ記述します。 1.変更前の現在時刻を記憶(時刻1とします) 2.時刻の変更(時刻2とします)(時刻1と時刻2は実時間上、同時刻とします) 3.ファイルをたくさん生成。 4.時刻を取得(時刻3)とします。 5.変更すべき時刻=時刻1+(時刻3-時刻2) 6.上記の変更すべき時刻で変更する。 (要は時刻1から経過した時間分が現在時刻になります) 以上。

yamadaaoki
質問者

お礼

すみません、お礼を補足の方に書いてしまいました。 先ほど >ファイル作成途中に何度か日付、時刻共にを変更しているので、 >その方法で経過時間が取得ができません…。 と書きましたが、その都度経過時間を取得していけば大丈夫そうですね。 なので、この方法で試してみたいと思います。 アドバイス、ありがとうございました。

yamadaaoki
質問者

補足

回答、ありがとうございます。 なるほど、経過時間を足すのですね。参考になります。 ただ今回の場合、質問記事には書いていないですが、 ファイル作成途中に何度か日付、時刻共にを変更しているので、 その方法で経過時間が取得ができません…。 なので他の方法を探そうと思います。 貴重なアドバイス、ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.4

Unix/Linuxであれば、大抵touchコマンド(ファイルのタイムスタンプの変更コマンド)があるので、現在時刻を変更するのでなく、touchコマンドで望みのタイムスタンプを持つファイルを作るのが正しい方法です。 例: touch -d "2009-01-05 00:23:45" file1 file2 file3 ... おかしな事をする必要が出てきたら、そもそも考え方が間違っていると思いましょう。 もっと言うなら、 >作成日が現在日時ではないファイルを、たくさん作成する がそもそも間違っているのかもしれません。

yamadaaoki
質問者

お礼

回答、ありがとうございます。 そうですね。アクセス時刻や更新時刻ならともかく、 作成時刻を変更する行為は、本来不自然なものですよね。 今後、時間のある時に設計から見直してみようと思います。 貴重なご意見、ありがとうございました。

すると、全ての回答が全文表示されます。
noname#208124
noname#208124
回答No.3

HFS+は作成時刻サポートしてますね 作成時刻無いというのは訂正します

yamadaaoki
質問者

お礼

なるほど、MacOSのファイルシステムは例外なのですね。 勉強になりました。ありがとうございます。

すると、全ての回答が全文表示されます。
noname#208124
noname#208124
回答No.2

UNIX系のOSだと作成時刻ってファイルシステムに無いはずですけど atime/mtimeだけならtouch -t使った方早いですよ 時刻覚えさせとくならハードウェアクロックに覚えさせておけばいいと思う Linuxならhwclock --hctosysと--systohc

yamadaaoki
質問者

補足

回答、ありがとうございます。 アクセス時間や修正時間はコマンドで変更できるのですね。勉強になりました。 そして、大事な所を書き忘れていましたが、このシェルスクリプトを 実行する環境はMac OS Xです。 どうやらMac OSではハードウェアクロックを使えない?ようです。 ( hwclock -rとコマンドを入力した所、実行できませんでした) また、atime/mtimeだけではなく、ctimeも変更したいと考えています。 投稿内容が不十分で申し訳ありませんでした。 大変勉強になりました。ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A