Задача проста: создать резервную копию /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] в /.
Вы можете использовать опцию -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
Другим способом является чтение rsync в списке файлов и синхронизация из /:
find /usr/local/bin -print0 | rsync --dry-run -0acvzRAHSX --files-from=- / backup/folder
find 's -print0 и rsync' s [ f7] использовать имена файлов, разделенные символом nul - самый безопасный способ обработки имен файлов с ввода.