Como posso obter a idade de um determinado arquivo em, pelo menos, dias?
Estou ciente ls -lh
e comandos semelhantes. Eu quero algo que funcione mais ou menos assim:
getfage <FILE> # prints out '12d' (12 days)
Além disso, isso precisa ser um pouco multiplataforma, já que eu também gostaria de usá-lo no Mac OS X, mas o principal caso de uso está na minha caixa do Linux.
NOTA
Como o Linux não controla o tempo de criação, estou procurando uma solução dupla: uma para mtime (linux) - que é a última vez que o arquivo foi modificado - e outra para o Mac OS X, que pode lidar com mtime ou hora de criação.
command-line
files
timestamps
Alexej Magura
fonte
fonte
stat
dá tudo o que você precisa, certo?Respostas:
O Unix não controla uma data de criação. As únicas informações disponíveis são normalmente as últimas vezes que os arquivos foram:
( A partir desta resposta )
Você pode obter datas relacionadas a um arquivo específico usando o
stat
comandoExemplo
OSX e HFS
Se você estiver usando o OSX, o sistema de arquivos usado no Unix é o HFS . Este é um dos poucos (que eu conheço) que mantém a data de criação no sistema de arquivos, juntamente com o tempo de modificação, etc., semelhante a outros Unixes.
excerto
Timestamps
Os carimbos de data e hora são sempre mantidos no sistema de arquivos, portanto, você fica limitado por qualquer rastreamento de tempo oferecido por eles (EXT3, EXT4, XFS, etc.).
Sistemas de arquivos
Se você estiver curioso, dê uma olhada neste tópico da Wikipedia intitulado: Comparação de sistemas de arquivos . Ele possui a lista mais extensa de itens de arquivo que eu conheço, além de uma boa tabela de vários recursos e o status de suporte ou não em um determinado sistema de arquivos.
Referências
fonte
O OSX mantém o controle da criação de arquivos, mas a maioria dos outros departamentos não, por isso não há como saber o tempo decorrido desde a criação do arquivo. Você pode obter o tempo decorrido desde a última modificação em praticamente qualquer sistema operacional.
Não existe um utilitário de shell portátil para recuperar o tempo de modificação de um arquivo, exceto o
ls
que possui uma saída quase impossível de analisar. No Linux, o seguinte comando imprime a idade de um arquivo:No Linux, você pode usar
stat -c %Y -- "$filename"
como sinônimo dedate +%s -r "$filename"
.OSX
date
estat
comandos são diferentes. Você pode usar o seguinte comando:Sistemas Linux não integrados e OSX têm o Perl instalado por padrão.
fonte
stat
, no Linux o syscall não foi retrabalhado e, portanto, você deve recorrer a hackersdebugfs
.Com base na resposta de Gilles, aqui está uma função bash que retorna a idade do arquivo em segundos ou erro.
fonte
Você pode usar
stat -f%B
,,ls -lU
oumdls -n kMDItemFSCreationDate
para ver a hora da criação (nascimento) no OS X:fonte
procure
man stat
por-c
opções (formato)fonte