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

45

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

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ [email protected]:LinuxHome

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

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

и он находится в той же папке, которую я запускаю rsync (домашняя папка).

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

Что я делаю неправильно?

    
задан xpanta 24.09.2013 в 19:03
источник

1 ответ

74

Проблема заключается в том, что вы указываете полные пути к каталогам.

С помощью rsync все пути исключения (или включения), начинающиеся с / , привязаны к корню передачи . Корнем передачи в этом случае является /home/chris . Если вы это сделали:

rsync -Paz --exclude-from 'rsync-exclude.txt' / [email protected]:

... тогда ваши исключения должны работать.

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

Попробуйте удалить /home/chris из файла rsync-exclude.txt .

На самом деле вам просто нужна одна строка в файле:

/Downloads

ПРИМЕЧАНИЕ . Если вы не указали ведущий / , и у вас был каталог с именем /home/chris/special-stuff/Downloads , это также было бы исключено. Я предполагаю, что вы хотите исключить свой «верхний уровень» (относительно исходного каталога, так называемого «root of transfer») Downloads , поэтому вам понадобится ведущий / .

Кстати, если бы у вас была (только) строка /Downloads/* в вашем файле, это обеспечило бы, что каталог Downloads существует на целевом объекте, но не копирует его содержимое!

На самом деле, если вам нужно только исключить один каталог, было бы проще просто сделать это (без файла исключения вообще):

rsync -Paz --exclude /Downloads /home/chris/ [email protected]:LinuxHome

Я вижу, что вы поняли это правильно, но те, что новичок в rsync, должны отметить косую черту в конце /home/chris/ . Чтобы процитировать страницу rsync man, вы можете думать о конце или в источнике как о значении «копировать содержимое этого каталога», а не «копировать каталог по имени» ». Поэтому, если вы остановили эту завершающую косую черту, в конечном итоге вы получите каталог с именем chris в целевом каталоге, содержащий все из /home/chris (за исключением исходного каталога Downloads , конечно).

    
ответ дан Lambart 24.09.2013 в 19:31
источник