取得編譯日期

取得編譯日期

我正在嘗試從 linux 命令中提取編譯日期(或者 cpp 也可以)。我在用:

stat -c %z ./myProgram.bin

但是,如果我myProgram.bin透過 ssh 複製到另一個地方,stat 命令基本上會給出複製的日期。

如何獲得真實的編譯日期?謝謝。

答案1

托馬斯·迪基的回答對於任何 (ELF) 二進位文件,總體上解決了這個問題。鑑於您的問題的措辭方式,您可能會發現__DATE____TIME__預定義的巨集有用;它們允許在程式中引用編譯日期和時間(因此程式知道自己的編譯日期和時間)。

這是一個簡單的例子:

#include <stdio.h>

int main(int argc, char **argv) {
    printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
    return 0;
}

答案2

stat -c %z顯示文件的上次建立/更新時間,並且不可更改或儲存。因此,如果您將文件複製到其他位置,它將始終獲得新的當前建立時間。您要尋找的是stat -c %y顯示上次修改時間,大多數處理檔案和目錄的工具通常都會保留該時間。

答案3

您可以複製保留修改時間,例如,

cp --preserve=timestamps source destination

或(更一般地說:模式,所有權時間戳

cp -p source destination

儘管在某些情況下,保留所有權不受歡迎。

同樣,您可以使用 scp 的選項複製到遠端系統-p

scp -p source remote:destination

scp沒有模式等的單獨選項。偏僻的權限,它沒有同時設定遠端所有權的功能。由於這些限制,您可能希望tar在遠端系統上提取存檔,以保留盡可能多的信息。

用於二進位檔案的 ELF 格式不包含日期,因此您只能保留檔案的修改時間戳記。

延伸閱讀:

相關內容