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形式には日付が含まれていないため、ファイルの修正タイムスタンプのみを保持できます。
追加資料: