web-dev-qa-db-ja.com

エポック形式でファイルのmtimeを設定するにはどうすればよいですか?

私はgetファイルのエムポック形式のmtimeの方法を知っています。

stat --format=%Y <file>

しかし、エポック形式でファイルのmtimeをsetする方法を理解できていません。 touch(1)のマニュアルページは、「タイムスタンプ」値​​(月、日、時間、分などを使用する多かれ少なかれ固定形式)または「ほとんど自由な形式の人間が読める日付文字列」のみを受け入れるようです。

調査する必要がある別のユーティリティはありますか?

ありがとう。

11
eil

少なくともGNU世界では:

touch --date=@1403970787 file

dateと同様です。

10
Hauke Laging

Perlの場合:

$ Perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...

これにより、@ARGV内のすべてのファイルのmtimeが変更されます。 (stat($_))[8]はファイルの時間です。

utimeはファイルのリストを受け取ることができます。時間を変更する必要がない場合は、次のことを試してください。

 $ Perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...

utimeは、Cランタイムライブラリとファイルシステムが使用しているものに依存します。詳しくはperldoc -f utimeperldoc perlportをご覧ください。

1
cuonglm

GNU coreutilsからのtouchコマンドを使用して(つまり、非組み込みLinuxおよびCygwinの場合)、 フルマニュアル を確認します(通常、ローカルで情報を入手できます)形式) 日付入力形式 のドキュメント エポック日付 は、プレフィックス@で示されます。

touch -d @1234567890 foo

これはBusyBoxでも機能します(少なくとも一部のシステムでは、コンパイルオプションに依存する場合があります)。

* BSDでは、touchだけでこれを行うことはできないと思いますが、dateを呼び出して、エポック時間をtouchが受け入れる形式にフォーマットできます。

touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo

POSIXはエポック日付を操作する方法がないことで有名です。 Perlを使用 できます。