Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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 назад.


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