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

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

私はやり方を知っている得るエポック形式のファイルの mtime:

stat --format=%Y <file>

しかし、私はどうすればいいのか分からなかったセットエポック形式のファイルの mtime。touch(1) のマニュアル ページでは、「タイムスタンプ」値​​ (月、日、時間、分などを使用する、ほぼ固定形式) または「ほぼ自由形式の人間が読める日付文字列」のみを受け入れるようです。

他に検討すべきユーティリティはありますか?

ありがとう。

答え1

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

touch --date=@1403970787 file

のようにdate

答え2

touchGNU coreutilsのコマンド(つまり、非組み込み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を使用する

答え3

perl

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

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

utimeファイルのリストを受け取ることができます。atime の変更を気にしない場合は、次を試すことができます。

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

注記

utime使用している C ランタイム ライブラリとファイル システムに依存します。詳細については、perldoc -f utimeおよびを参照してくださいperldoc perlport

関連情報