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