Як виключити кілька каталогів з rsync?


184

Я намагаюся створити резервну копію домашнього каталогу за допомогою rsync, і я хочу виключити деякі каталоги, які містять небажану інформацію. Хочу спеціально виключити /home/ben/.ccacheі /home/ben/build. На жаль, документація на rsync перевантажена інформацією і не відповіла на моє запитання. Це те, що я спробував:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

Який правильний спосіб це зробити?


4
Просто хотів сказати, що прапор aмається на увазі r:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Попул

Відповіді:


238

Добре, я відчуваю себе справді німим. Перш ніж я навіть розмістив це питання, мій друг показав мені, як це зробити, і це дуже просто. Для виключення декількох каталогів ви просто використовуєте кілька --exclude=pathкомутаторів. Отже моя команда, написана вище, правильно наступна:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

7
Абсолютний шлях для мене не працював (вказаний каталог мовчки не виключався), тоді як шлях відносно вихідного каталогу працював правильно. Можливо, мені чогось не вистачає, але я був би обережний щодо твердження @FreeSoftwareServers про те, що абсолютні шляхи завжди працюють.
Soren Bjornstad

5
FYI: Опція -aвключає в себе -rтак -arнадлишкова.
Девід

4
Всупереч тому, що вважає FreeSoftwareServers, шлях виключення відносно шляху до джерела, НЕ /. Тож цей коментар категорично помилковий і призведе до невдач, якщо ви дотримуєтесь цього. Найкраща стратегія - це відмовитися від провідних / у вас виключеннях, щоб уникнути такого типу психічних помилок. Якщо джерело, скажімо, / home / me і якщо ви виключаєте = '/ mydir /', це виключає каталог mydir в / home / me, тобто виключає / home / me / mydir NOT / mydir / at /. Прикро, що я не можу ні спростувати, ні редагувати цей коментар, оскільки технічно це неправильно і введе в оману.
Lizardx

3
FYI для пізніших мандрівників, схоже, коментар, про який йдеться у запиті @FreeSoftwareServer, видалено. tl; dr: використовувати відносні шляхи
Freedom_Ben

2
Якщо ти німий, то я та 179 інших користувачів!
Шрідхар Сарнобат

108

Якщо у вас є кілька каталогів та / або файлів для виключення, створіть текстовий файл та скористайтесь --exclude-fromперемикачем. Зробіть файл, який називається, exclude_me.txtі в ньому перерахуйте свої виключення. Приклад ( /home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

Тоді ваш rsync буде виглядати приблизно так:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

Ось якась інформація про правила фільтра, яка може допомогти:

  • /dir/ означає виключити кореневу папку /dir
  • /dir/*означає отримати кореневу папку, /dirале не вміст
  • dir/ означає виключити будь-яку папку в будь-якому місці, де міститься ім’я dir/

  • Приклади виключені: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cfозначає пропуск файлів, які починаються з cfбудь-якої папки в межах/var/spool/lpd

Також дивіться розділ правил фільтрації на сторінці людини.


4
Важливо зазначити, що коренева папка означає корінь передачі, а не кореневий каталог.
jamesdlin

Це геніальна відповідь!
Олександр Жуков

85

Ви також можете виключити кілька шляхів у фігурних дужках:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

40
це добре працює, тільки не під ш, тільки під баш, я виявив "важкий шлях"
xor

7
Не буде місця після коми. Дізнався, що важкий шлях теж st
styl3r

І не використовуйте '' як --exclude = '. Gvfs'
Мартін Т.

FWIW, я думаю, фігурні брекети працюють з ksh. Для інших оболонок, ви могли б використовувати що - щось на кшталт: IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/. Або ви можете просто використовувати кілька --excludeаргументів, які вам доведеться вводити вручну.
TSJNachos117

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