Как исключить папку из rsync

Я пытаюсь сделать резервную копию моей домашней папки на диске NAS. Я даю это:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

, где rsync-exclude.txt имеет это содержимое:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

, и я в этой же папке выполняю rsync (домашняя папка).

Однако rsync пытается скопировать и эту папку.

Что я делаю не так?

60
задан 22 September 2017 в 03:46

2 ответа

Вы обеспечиваете полные пути в Вашем исключать список.

С rsync все исключают (или включайте!) начало путей / привязываются на "корне передачи".

Корень передачи в этом случае /home/chris. Если Вы сделали:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

... затем Ваши исключения должны работать (но Вы скопировали бы все остальное в той файловой системе!).

Но так как Вы просто пытаетесь синхронизировать свой корневой каталог, и нет никакого подкаталога /home/chris именованный "home/chris/Downloads", rsync не находит ничего, что соответствует.

Так попытайтесь удалить /home/chris части от Вашего rsync-exclude.txt файл.

На самом деле необходимо просто быть нужна одна строка в файле:

/Downloads

Обратите внимание на это, если Вы не указываете продвижение /, и Вы, оказывается, называете другие каталоги "Downloads", они были бы также исключены. Я предполагаю, что Вы только хотите исключить свой "верхний уровень" (относительно исходного каталога, иначе "корень передачи") Downloads каталог, таким образом, Вы захотите продвижение /.

САМЫЙ ЛЕГКИЙ ПУТЬ (для исключения только нескольких путей)

Если только необходимо исключить один каталог, просто сделайте это (предотвращение отдельного файла):

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

Можно также объединить в цепочку вместе --exclude теги, как так:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

Обратите внимание, что с тех пор нет никакой наклонной черты, что каждый исключит .hiddenFile из любого каждого каталога это копирует!

Но если у Вас есть больше, чем несколько исключений, Вы более обеспечены с --exclude-from и файл.

Примечание:

Я вижу, что Вы разобрались в нем, но плохо знакомые с rsync должны отметить наклонную черту в конце /home/chris/

Заключить в кавычки rsync страница справочника, "Можно думать о запаздывании / на источнике как значение 'копии содержание этого каталога' в противоположность 'копии каталог по имени'".

Таким образом, если бы Вы бросили ту запаздывающую наклонную черту, то Вы закончили бы с названным каталогом chris в рамках целевого каталога, содержа все от /home/chris (кроме оригинала Downloads каталог, конечно!).

88
ответ дан 22 September 2017 в 03:46

Это может показаться проще, и просто примечание об исключении каталогов и синтаксиса:

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

Это исключит эти каталоги и все файлы в них. По какой-то причине rysnc не добавлял / home / username в /.cache. Только home / будет привязывать себя, поэтому мне пришлось добавить / username в каждый исключенный каталог.

Справочные страницы говорят: «Если шаблон начинается с /, то он привязывается к определенной точке в иерархии файлов, в противном случае он сопоставляется с концом пути». Но эта иерархия, кажется, является только первым каталогом в исходном каталоге. Я использую bash, версия 4.4.23 (1) -релиз.

0
ответ дан 22 September 2017 в 03:46

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

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