如何以紀元格式設定檔案的 mtime?

如何以紀元格式設定檔案的 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單獨完成此操作,但您可以呼叫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]是文件的時間。

utime可以接收文件列表,如果你不關心更改atime,你可以嘗試:

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

筆記

utime取決於 C 運行時庫和正在使用的檔案系統。請參閱perldoc -f utime和中的更多內容perldoc perlport

相關內容