Respostas:
Apenas para hora de modificação
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Você pode usar -cmin
para alterar ou -amin
para tempo de acesso. Como outros apontaram, não acho que você possa controlar o tempo de criação.
find
retornou diferente de zero quando nenhuma correspondência foi encontrada.
text.txt
presume-se que não seja um diretório.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
Sempre gostei de usar date -r /the/file +%s
para descobrir sua idade.
Você também pode fazer touch --date '2015-10-10 9:55' /tmp/file
para obter um tempo extremamente refinado em uma data / hora arbitrária.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
[com a suposição de que criou e nunca modificou, ou "idade em relação ao mod"]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
é, se não obsoleto , pelo menos antigo e menos portátil , e deve-se usar em seu $(( ))
lugar; e backquotes são mais frágeis do que $( )
; e também hífens em nomes de função podem não ser totalmente portáveis. A essência disso é boa!
Usando o stat
para descobrir a data da última modificação do arquivo, date
para descobrir a hora atual e um uso liberal de bashismos, pode-se fazer o teste que você deseja com base na hora da última modificação do arquivo 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
Embora o código seja um pouco menos legível do find
que a abordagem, acho que é uma abordagem melhor do que executar find
para examinar um arquivo que você já "encontrou". Além disso, a manipulação de datas é divertida ;-)
%Z
invés do %Y
abaixo para obter o "tempo de mudança" que pode ser o que você deseja.[Atualizar]
Para usuários de mac, use em stat -f "%m" $somefile
vez da sintaxe específica do Linux acima
stat
não está embutido - muito ruim da minha parte, vou consertar.
O tempo de criação não é armazenado.
O que são armazenados são três carimbos de data / hora (geralmente, eles podem ser desligados em certos sistemas de arquivos ou por certas opções do sistema de arquivos):
uma "alteração" no arquivo é contada como alterações de permissão, renomeação, etc. Enquanto a modificação é apenas de conteúdo.
Embora ctime não seja tecnicamente o momento da criação, frequentemente é.
Como o ctime não é afetado por alterações no conteúdo do arquivo, geralmente só é atualizado quando o arquivo é criado. E sim - posso ouvir vocês gritando - também é atualizado se você alterar as permissões de acesso ou propriedade ... mas geralmente isso é algo que é feito uma vez, geralmente ao mesmo tempo em que coloca o arquivo lá.
Pessoalmente, sempre uso o mtime para tudo e imagino que seja isso que você queira. Mas enfim ... aqui está uma nova versão da festa "nada atraente" de Guss, em uma função fácil de usar.
#! / bin / bash idade da função () { nome do arquivo local = $ 1 local alterado = `stat -c% Y" $ filename "` local agora = `data +% s` local decorrido deixe decorrido = agora alterado echo $ decorrido } arquivo = "/" echo A idade de $ file é $ (idade "$ file") segundos.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/…
chmod
, aplicado no arquivo, vai anular essa ideia. Mas eu posso viver com você fazendo isso ;-)
+%s
do segundo tempo
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(Obrigado a @Grizly pela correção!)
noatime
opção (o que é bom para o desempenho, então você deve usá-lo). Portanto, basta usar em %X
vez de %Y
.
Encontrar é bom, mas acho que você pode usar de outra maneira, especialmente se você precisar saber agora quantos segundos o arquivo está antigo
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
usando a data GNU
Considere o resultado da ferramenta 'stat':
File: `infolog.txt'
Size: 694 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 11635578 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800
Você pode ver aqui as três datas de acesso / modificação / alteração. Não há data de criação. Você só pode ter certeza de quando o conteúdo do arquivo foi modificado (o campo "modificar") ou seu inode mudou (o campo "alterar").
Exemplos de quando ambos os campos são atualizados:
"Modificar" será atualizado se alguém concatenou informações extras ao final do arquivo.
"Alterar" será atualizado se alguém alterar as permissões via chmod.