Как проверить последний раз, когда каталог был изменен в Linux

Я пытаюсь написать решение для резервного копирования, которое будет делать моментальные снимки папки, используя жесткие ссылки и rsync, каждый час, когда она будет работать, и делать моментальный снимок. У меня большая часть уже отсортирована, это просто мелкие детали, которые мне не хватает.

Я уже планирую систему, которая будет очищать старые резервные копии в зависимости от того, как далеко они находятся друг от друга, и сколько им лет, в некотором роде экспоненциальный режим отката. Следовательно, для хранения почасовых резервных копий не потребуется много места на диске. (возраст каждой резервной копии делится на резервную копию после нее...)

Однако я буду запускать это на машине, на которой регулярно не будет никаких изменений в резервной копии (в одночасье, когда люди в отпуске и т. Д.), И поэтому я хотел бы принять это во внимание. Если только для целей энергосбережения.

Есть ли способ сказать, когда в последний раз изменилось время всего каталога / home /?

Желательно без полного обхода каталога, так как это несколько отразило бы точку.

Есть ли лучший способ сделать это?

1 ответ

Решение

Rsync может сделать эту функцию с -u or --update флаги.

Со страницы руководства 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).

Если вы не хотите использовать rsync, я могу подумать о двух других способах получения этой информации. Но оба способа потребуют детализации файловой системы.

Сначала более уродливый способ:

Используйте стат stat --format=%y <file> и проанализировать выведенное время. Вы должны были бы сделать некоторые довольно уродливые вещи, чтобы заставить это работать правильно.

Второй способ глажки:

использование find <path> -mtime -<number_of_days> чтобы получить список файлов, которые были изменены в окне number_of_days ago.


Re: энергосбережение

Это займет некоторый взлом и не будет на 100% надежным - в том смысле, что вы можете пропустить что-то, что требует резервного копирования. Но вы можете сделать что-то вроде следующего и просто не запускать домашние диски во время определенных окон:

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

Первый тест даты проверяет, чтобы увидеть, не наступило ли это до 22:00, второй - после 8:00, а последняя проверяет, что день недели меньше или равен 5 (date +%u выводит день недели из 1-7, один из которых - понедельник, поэтому 6 и 7 - суббота и воскресенье)

Что касается праздников, то единственное, что я могу придумать, это сохранить файл с номером дня в году для каждого праздника, а затем сопоставить его с date +%j

Другие вопросы по тегам