コンパイル日の取得

コンパイル日の取得

Linuxコマンドからコンパイル日を抽出しようとしています(またはcppも機能します)。私は以下を使用しています:

stat -c %z ./myProgram.bin

ただし、myProgram.binSSH経由で別の場所にコピーすると、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形式には日付が含まれていないため、ファイルの修正タイムスタンプのみを保持できます。

追加資料:

関連情報