Epoch形式でファイルのmtimeを設定する方法は?

Epoch形式でファイルのmtimeを設定する方法は?

私はどうするか知っています得るファイル変更時間(エポック形式):

stat --format=%Y <file>

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

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

ありがとうございます。

答え1

少なくともGNUの世界では:

touch --date=@1403970787 file

同様にdate

答え2

touchGNU coreutils(つまり、組み込みのLinuxおよびCygwin)のコマンドを使用する場合は、以下を参照してください。完全なマニュアル(通常情報形式で現地で提供)日付入力形式新起源日プレフィックスでマーク@:

touch -d @1234567890 foo

これはBusyBoxでも機能します(少なくとも一部のシステムではコンパイルオプションによって異なります)。

* BSDの場合、自分ではできないようですが、エポック時間を許容形式でフォーマットするようにtouch呼び出すことができます。datetouch

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

POSIXは、時代の日付を操作する方法が不足しているため、悪名高い。あなたはできますパールを使って

答え3

そしてperl

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

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

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

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

ノート

utimeCランタイムライブラリと使用しているファイルシステムによって異なります。perldoc -f utimeとで詳細を確認してくださいperldoc perlport

関連情報