Я пытаюсь сделать резервную копию моей домашней папки на диске 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 пытается скопировать и эту папку.
Что я делаю не так?
Вы обеспечиваете полные пути в Вашем исключать список.
С 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
каталог, конечно!).
Это может показаться проще, и просто примечание об исключении каталогов и синтаксиса:
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) -релиз.