Як виключити папку з rsync


60

Я намагаюся створити резервну копію домашньої папки на своєму накопичувачі 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 також намагається скопіювати цю папку.

Що я роблю неправильно?

Відповіді:


88

Ви надаєте абсолютний шлях у своєму списку виключень.

За допомогою 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каталогу, звичайно!).


2

Це може бути простішим для очей, і лише примітка про виключення каталогів та синтаксису:

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. Лише домашній / прив’язав би себе, тому мені довелося додати / ім’я користувача до кожного виключеного каталогу.

Сторінки чоловіка говорять: "Якщо шаблон починається з /, то він прив’язаний до певного місця в ієрархії файлів, інакше він буде зіставлений з кінцем назви шляху". Але ця ієрархія, здається, є лише першою в каталозі джерела. Я використовую bash, версія 4.4.23 (1) -випуск.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.