Локальная команда rsync для захвата суб-под-подкаталога /

Задача проста: создать резервную копию /usr/local/bin и файлов внутри нее и сохранить информацию о пути.

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

# --dry-run is for convenience.
rsync --dry-run -aczvAXHS --progress \
  --include="/usr/local" \
  --exclude="/usr/*" \
  --include="/usr/local/bin" \
  --exclude="/usr/local/*" \
  /usr \
  backup/folder

Может ли кто-нибудь объяснить лучший способ выполнения этой задачи?

--- EDITED TO ADD ---

Как указано в комментариях, вопрос мог быть более точным. Ожидается, что ответ, представленный здесь, будет работать в контексте «архива» нескольких подкаталогов [sub-sub] в /.

1
задан 9 December 2015 в 03:36

2 ответа

Вы можете использовать опцию -R. Из man rsync:

-R, - relative Используйте относительные пути. Это означает, что полные имена путей, указанные в командной строке, отправляются на сервер, а не только на последние части имен файлов.

Пример:

% rsync -acvzRAHSX /usr/local/bin/ out_dir/ 
sending incremental file list
/usr/
/usr/local/
/usr/local/bin/
/usr/local/bin/foobar
/usr/local/bin/spamegg


% tree 
.
└── out_dir
    └── usr
        └── local
            └── bin
                ├── foobar
                └── spamegg


% tree /usr/local/bin 
/usr/local/bin
├── foobar
└── spamegg
1
ответ дан 23 May 2018 в 15:25
  • 1
    Спасибо, это работает. Конечно, в этом вопросе отсутствовал вопрос, что мой фрагмент был лишь частью гораздо более крупной операции rsync, на самом деле rsyncing из / с большим количеством исключений. Я могу использовать ваш метод для других глубоких папок, таких как /var/www/owncloud/themes, но это потребует много вызовов rsync для этих типов папок. – Tfb9 30 November 2015 в 01:54
  • 2
    @ Tfb9 Это меняет весь сценарий. Возможно, вы должны были упомянуть все это в первую очередь. – heemayl 30 November 2015 в 04:46

Другим способом является чтение rsync в списке файлов и синхронизация из /:

find /usr/local/bin -print0 | rsync --dry-run -0acvzRAHSX --files-from=- / backup/folder

find 's -print0 и rsync' s [ f7] использовать имена файлов, разделенные символом nul - самый безопасный способ обработки имен файлов с ввода.

0
ответ дан 23 May 2018 в 15:25

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

Похожие вопросы: