Como verificar a última vez que um diretório foi modificado no linux

1

Eu estou tentando escrever uma solução de backup, que irá tirar instantâneos de uma pasta usando hardlinks e rsync, a cada hora ela vai rodar e tirar o instantâneo. Eu tenho a maior parte já classificada, são apenas pequenos detalhes que estão faltando.

Eu já estou planejando um sistema que irá limpar backups antigos, dependendo de quão distantes eles estão, e quantos anos eles têm em uma espécie de moda backoff exponencial. Portanto, não ocupará muito espaço em disco para manter backups por hora. (a idade de cada backup é dividida pelo backup depois disso ...)

No entanto, eu vou estar executando isso em uma máquina que regularmente não terá alterações no backup (durante a noite, quando as pessoas estão de férias, etc.) e, como tal, eu gostaria de levar isso em conta. Se apenas para fins de economia de energia.

Existe alguma maneira de saber quando a última hora modificada de todo o diretório / home / é?

Perferivelmente sem percorrer completamente o diretório, pois isso poderia de alguma forma frustrar o ponto.

Existe alguma maneira melhor de fazer isso?

    
por Thingomy 06.02.2010 / 19:31

1 resposta

1

O Rsync pode fazer essa função com os -u or --update flags.

Na página do manual do rsync:

-u, --update
              This  forces rsync to skip any files which exist on the destinaâ
              tion and have a modified time that  is  newer  than  the  source
              file.   (If an existing destination file has a modify time equal
              to the source fileâs, it will be updated if the sizes  are  
              different.)

              In  the current implementation of --update, a difference of file
              format between the sender and receiver is always  considered  to
              be important enough for an update, no matter what date is on the
              objects.  In other words, if the source has  a  directory  or  a
              symlink  where  the  destination  has a file, the transfer would
              occur regardless of the timestamps.  This might  change  in  the
              future  (feel free to comment on this on the mailing list if you
              have an opinion).

Se você não quiser usar o rsync, posso pensar em duas outras maneiras de obter essa informação. Mas as duas formas exigirão que você faça uma busca detalhada no sistema de arquivos.

Primeiro, o jeito mais feio:

Use stat stat --format=%y <file> e analise o tempo de saída. Você teria que fazer algumas coisas bem feias para fazer isso funcionar direito.

Segundo o caminho mais suave:

use find <path> -mtime -<number_of_days> para obter uma lista de arquivos que foram modificados dentro da janela number_of_days ago.

Re: economia de energia

Isso exigiria alguns hackers e não seria 100% confiável - no sentido de que você pode perder algo que precisa ser armazenado em backup. Mas você pode fazer algo parecido com o seguinte e simplesmente não executar em unidades de disco rígido em determinadas janelas:

if [ 'date +%k' -lt 22] && ['date +%k' -gt 8] && [ 'date +%u' -le 5 ]
then
     #Set some flags for run control.
fi 

O primeiro teste de data, verifica se está antes das 22h, o segundo depois das 8h e o último verifica se o dia da semana é menor ou igual a 5 ( date +%u outputs dia da semana de 1-7 com um sendo segunda-feira, então 6 e 7 são sábado e domingo)

No que diz respeito a feriados, a única coisa que posso realmente pensar em fazer é manter um arquivo com o número do dia do ano para cada feriado, em seguida, compare com date +%j

    
por 06.02.2010 / 19:59