Как я могу использовать rsync для резервного копирования файлов, измененных за последний период?

17

Можно ли указать временной диапазон, чтобы rsync работал только с недавно измененными файлами.

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

Единственное решение, с которым я столкнулся до сих пор, - это поиск с помощью ctime для создания файла -files-from. Это работает, но мне приходится иметь дело с некоторыми старыми установками с версиями rsync, которые не поддерживают -files-from. Я рассматриваю возможность генерации --include-from шаблонов таким же образом, но мне бы хотелось найти что-то более элегантное.

    
задан Ken 03.06.2009 в 17:09
источник
  • После того, как вы выполнили свой первоначальный rsync в следующий раз, когда вы его вызовете, он будет передавать только новые или измененные файлы. Это цель rsync. –  lothar 03.06.2009 в 17:24
  • Другим вариантом было бы реорганизовать макет вашего каталога, если файлы, которые вы не хотите создавать, находятся в другом пути, поэтому вы можете поместить этот путь в список игнорирования для rsync. –  lothar 03.06.2009 в 17:26
  • Я собирался предложить использовать параметр -t rsync, но это не совсем то, что было задано –  Hasturkun 03.06.2009 в 17:28
  • Спасибо lothar - но моя проблема в том, что существует огромное количество исторических файлов, которые меня не интересуют (но не могут удалить, поскольку они могут быть полезны другим людям). Я надеюсь на решение, которое позволит мне полностью игнорировать старый материал. –  Ken 03.06.2009 в 17:30
  • @lothar - и я не могу удалить или изменить исходный материал –  Ken 03.06.2009 в 17:31

4 ответа

26

Похоже, вы можете указать команды оболочки в аргументах rsync (см. Remote rsync выполняет произвольные команды оболочки )

, поэтому я смог успешно ограничить файлы, которые просматривает rsync, используя:

rsync -av remote_host:'$(find logs -type f -ctime -1)' local_dir

Это ищет файлы, измененные в последний день (-ctime -1), а затем rsyncs в local_dir.

Я не уверен, что эта функция по дизайну, но я все еще копаю в документации.

    
ответ дан Ken 04.06.2009 в 13:55
  • Просто хотел отбросить строку, которая только что появилась в супер полезной для сценария импорта данных, который я использую. Спасибо! –  Matthew 18.06.2012 в 17:22
  • Следите за этим, хотя; если у вас много файлов, которые соответствуют, результаты встроенного поиска могут выполняться в пределе длины командной строки оболочки. Случилось со мной. –  GaryO 28.04.2015 в 19:27
  • Это не сохранит структуру каталогов –  carlosvini 21.05.2015 в 23:36
2

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

Резервное копирование всего упрощается и значительно снижает риск ошибок. Попытка выборочного резервного копирования некоторых файлов, а не других, - это рецепт для того, чтобы не создавать резервные копии, что вам нужно, не осознавая этого, а затем сжигаться, когда вы не можете восстановить критический файл.

В противном случае вы должны реорганизовать исходный каталог, чтобы в вашем сценарии резервного копирования было меньше «принятия решений».     

ответ дан whatsisname 03.06.2009 в 17:31
  • Обычно я соглашаюсь с риском ошибок, но я никогда не буду использовать старые файлы (журналы и другие записи, которые никогда не изменятся). Я бы просто принял тепло, но мысль о том, что нужно загружать и регулярно перерабатывать несколько гигабайт нежелательного раздувания, является тем, что вызвало этот вопрос в первую очередь. Реорганизация, вероятно, является решением - я не могу изменить существующую структуру, но я могу создать временный каталог, как предложил Хастуркун. –  Ken 03.06.2009 в 18:07
  • Для меня я хочу перенести с удаленного на локальный, обрабатывать файлы, а затем удалить старые (mtime +30) из локального, чтобы сэкономить место. В следующий раз Naive rsync повторно загружает старые, потому что теперь они отсутствуют на локальном компьютере. –  GaryO 28.04.2015 в 19:28
1

Как создать временный каталог, символическую привязку или жесткую привязку файлов, а затем rsyncing?

    
ответ дан Hasturkun 03.06.2009 в 17:27
1

Могу я предложить вам удалить rsync и посмотреть rdiff-backup?

    
ответ дан I GIVE CRAP ANSWERS 04.06.2009 в 14:13
  • Спасибо, я посмотрю - я посмотрел на него ранее, но проблема совместимости с CIFS меня отключила. (rdiff-backup.nongnu.org/FAQ.html#cifs) –  Ken 04.06.2009 в 14:42