私はgetファイルのエムポック形式のmtimeの方法を知っています。
stat --format=%Y <file>
しかし、エポック形式でファイルのmtimeをsetする方法を理解できていません。 touch(1)のマニュアルページは、「タイムスタンプ」値(月、日、時間、分などを使用する多かれ少なかれ固定形式)または「ほとんど自由な形式の人間が読める日付文字列」のみを受け入れるようです。
調査する必要がある別のユーティリティはありますか?
ありがとう。
少なくともGNU世界では:
touch --date=@1403970787 file
date
と同様です。
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 utime
とperldoc perlport
をご覧ください。
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を使用 できます。