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

Как использовать rsync для удаления файлов старше 1 недели

Я использую rsync для резервного копирования файлов и папок:

 rsync -avqz --stats --delete /media/server/ /media/Server2/

Это удаляет файлы, которых нет в источнике, и гарантирует, что место назначения является точной копией источника.

Но мой босс хочет, чтобы я удалил только те файлы, которых нет в исходном коде и которым 1 неделя. Что-то вроде:

rsync -avqz --stats --delete(1 week old) /media/server/ /media/Server2/

Любые идеи?

Rsync не поддерживает это поведение из коробки. Вы можете найти другой инструмент, например rsnapshot например, Джейлен посоветовал сделать хороший ход.

Если вы действительно хотите делать именно так, как вы описываете, вот что вы можете сделать.

  • Сначала запустите rsync БЕЗ удаления. Это просто скопирует все из ваших живых данных в резервную копию.
  • Затем снова запустите rsync с удалением, но на этот раз в тестовом режиме (-n). Это сгенерирует список файлов, которые нужно удалить, на основе того, что было удалено в ваших текущих данных, но еще не в ваших резервных копиях. Сохраните этот вывод в файл с датой.
  • Теперь сохраните список вещей, которые нужно удалить, но обработайте их только через неделю. Держите очередь и обрабатывайте только те предложения по удалению, которые стояли в очереди не менее недели.

В качестве альтернативы используйте вывод rsync --delete -n но вместо постановки в очередь используйте другую проверку, например дату последнего изменения в резервной копии, чтобы убедиться, что вы удаляете только те вещи, которые не были отредактированы иным образом в течение недели. Это не совсем то поведение, о котором вы просили, но его проще запрограммировать и может хватить.

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

Альтернативный инструмент - rdiff-резервное копирование: http://www.nongnu.org/rdiff-backup/, который хранит как зеркало, так и настраиваемую по дате инкрементную резервную копию.

Просто вы можете написать небольшой сценарий bash для выполнения rsync и удаления файлов 7-дневной давности. Затем вы можете запустить этот сценарий с помощью crontab.

#----------------------------------------------------------
    #!/bin/bash

    rsync -avqz --stats --delete /media/server/ /media/Server2/
    find /media/Server2/* -mtime +7 -exec rm {} \;
#-------------------End of the script-----------------------

rsync сделает это с небольшой настройкой ...

на машине, которую вы хотите сделать резервную копию, выполните команду:

rsync -abvh --backup-dir=../oldcopysfilesdir/`date +%Y-%m-%d_%H.%M` --delete /path/to/source/ pi@192.168.1.6:/path/to/target

это создаст резервную копию файлов и папок и создаст папку "oldcopysfilesdir" на целевой машине со всеми старыми копиями измененных файлов и папок, все в определенных папках с отметками времени.

для удаления старых копий в папке "oldcopysfilesdir" на целевой машине выполните:

find /path/to/oldcopysfilesdir/* -mtime +7 -delete

эта команда удалит старые файлы и папки старше 7 дней, но только старые копии измененных файлов. В «/ path / to / target» всегда будет актуальное зеркало каталога «/ path / to / source /». Чтобы выполнить автоматизацию, создайте для команд задания anacron или cron.