Concordando que o tempo de mudança (também conhecido como ctime ) é o recurso mais portátil que pode ser observado em um sistema de arquivos * nix, o OP pode precisar de mais detalhes.
POSIX <sys/stat.h>
documenta três carimbos de hora para cada arquivo, diretório, dispositivo um sistema de arquivos: acesso , modificação e alterado . Os dois primeiros podem ser configurados com valores arbitrários usando utimes
(amplamente disponível, embora marcado como um extensão), mas o último não pode. Ele é atualizado para a hora atual como um efeito colateral de muitas chamadas do sistema, incluindo utimes
. É mais provável que seja atualizado por chmod
, mas também mover ou renomear um arquivo também faz isso.
No entanto, se você estiver procurando por pistas sobre quando um arquivo foi criado, o ctime é uma pista tão boa quanto você provavelmente encontrará. O tempo de acesso também pode ser útil, mas alguns sistemas de arquivos podem ser configurados para evitar atualizações. Olhe primeiro em ctime .
O programa find
(também documentado em POSIX) inclui uma opção para usar < em> ctime :
-ctime
n
The primary shall evaluate as true if the time of last change of file status information subtracted from the initialization time, divided by 86400 (with any remainder discarded), is n.
O 86400
refere-se ao número de segundos em um dia; n é um inteiro (o número de dias). Algumas implementações de find
fornecem unidades menores, mas elas não estão no POSIX.
Você poderia usá-lo assim para obter uma lista de arquivos alterados no último dia:
find . -ctime -1 -print
Algumas implementações podem permitir um valor não-inteiro para n , mas o POSIX é explícito aqui:
In the descriptions, wherever n is used as a primary argument, it shall be interpreted as a decimal integer optionally preceded by a plus ( '+' ) or minus-sign ( '-' )
Por isso, não é possível ter uma extensão compatível com POSIX nessa direção. Outras implementações podem fornecer opções alternativas que (por exemplo) especificam a diferença de tempo como um número de minutos. Você deve consultar o manual de find
para o sistema que está usando, para ver se isso se aplica a você.
Um dos comentários mencionou alguns sistemas de arquivos com uma extensão (também não padrão) para obter o tempo real de criação do arquivo. Vários sistemas tiveram isso ao longo dos anos, incluindo
- VMS (mais tarde renomeado para OpenVMS ), com criação , backup , revisão e expiração registros de data e hora.
- Windows , com criação , acesso e modificação registros de data e hora (observando que, embora os nomes sejam semelhantes, o as regras de atualização diferem do POSIX).
Existe uma discussão mais pertinente em Como obter o arquivo data de criação no Linux? , que menciona um membro st_birthtime
para a estrutura stat
. Isso está documentado em páginas de manual para o OSX stat(2)
e FreeBSD stat(2)
, bem como no sistema específico do FreeBSD stat(1)
e os utilitários stat(1)
da OSX. (O NetBSD também documenta esta extensão). Chame isso de uma característica dos modernos sistemas BSD, para breve.
O utilitário find
correspondente também suporta a extensão (veja, por exemplo, OSX encontrar (1) ):
all of the -B* birthtime related primaries are extensions to IEEE Std 1003.1-2001 (''POSIX.1'').
Outros sistemas não possuem essa extensão. Para discussão:
- Re: st_birthtime de Eric Blake na lista de discussão do Cygwin comentando sobre o fato de o Windows suportar isso, mas não POSIX.
- Linux: Como encontrar a data de criação do arquivo? postando por < em> scott afirma que existem alguns sistemas de arquivos que suportam um recurso análogo com um nome diferente.