Estou tentando extrair a data de compilação de um comando do Linux (ou cpp também serviria). Estou usando:
stat -c %z ./myProgram.bin
Porém, se eu copiar myProgram.bin
para outro local via ssh, por exemplo, o comando stat basicamente me dará a data da cópia.
Como posso obter a data real da compilação? Obrigado.
Responder1
A resposta de Thomas Dickeyaborda o problema em geral, para qualquer binário (ELF). Dada a forma como sua pergunta foi formulada, você pode achar que__DATE__
e __TIME__
macros predefinidasútil; eles permitem que a data e hora de compilação sejam referidas dentro de um programa (para que um programa saiba sua própria data e hora de compilação).
Aqui está um exemplo rápido:
#include <stdio.h>
int main(int argc, char **argv) {
printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
return 0;
}
Responder2
stat -c %z
exibe a hora da última criação/atualização do arquivo e não pode ser alterada ou preservada. Portanto, se você copiar o arquivo para outro local, ele sempre terá um novo horário de criação. O que você está procurando é stat -c %y
exibir a hora da última modificação, que geralmente é preservada pela maioria das ferramentas que lidam com arquivos e diretórios.
Responder3
Você pode copiar preservando a hora da modificação, por exemplo,
cp --preserve=timestamps source destination
ou (mais geralmente:modo,propriedadeecarimbos de data/hora)
cp -p source destination
embora em alguns casos, preservandopropriedadenão é desejado.
Da mesma forma, você pode copiar para sistemas remotos usando -p
a opção do scp:
scp -p source remote:destination
mas scp
não possui opções separadas para o modo, etc. Como funciona com o determinadocontrolo remotopermissões, ele não possui um recurso para definir propriedade remota ao mesmo tempo. Devido a essas limitações, você pode querer usar tar
para fazer um arquivo que você extrai no sistema remoto, preservando o máximo de informações possível.
O formato ELF usado para arquivos binários não inclui uma data, portanto, o carimbo de data/hora da modificação do arquivo é tudo o que você pode preservar.
Leitura adicional: