Не работает каталог rsync exclude

Я запускаю Fedora 17 64-bit, а rsync --exclude=/home/ben/<dir> работает не так, как ожидалось.

Я пытаюсь rsync мой домашний каталог на флэш-накопитель, но я хочу исключить, конечно, каталоги, в которых хранятся файлы кеша и файлы сборки. Это команда, которую я использую:

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

Однако содержимое из ~/build и ~/.ccache копируется rsync . Что я делаю не так?

3 Solutions collect form web for “Не работает каталог rsync exclude”

Глобальные правила фильтра rsync начинающиеся с ведущего / , привязаны к корню передачи. Цитата из раздела «INCLUDE / EXCLUDE PATTERN RULES» на странице руководства:

если шаблон начинается с /, то он привязан к определенному месту в иерархии файлов, в противном случае он сопоставляется с концом пути. Это похоже на ведущее ^ в регулярных выражениях. Таким образом, «/ foo» будет соответствовать имени «foo» в «корневом каталоге передачи» (для глобального правила) или в каталоге файла слияния (для правила для каждого каталога).

В вашей команде ( rsync ... -arv /home/ben home-ben/ ) файл /home/ben/foo будет перенесен в home-ben/ben/foo . Корень передачи – home-ben а правильный путь фильтра – /ben/foo . Таким образом,

  • для соответствия /home/ben/.ccache вам нужен путь фильтра /ben/.ccache
  • для соответствия /home/ben/build/ вам нужен путь фильтра /ben/build/

Более подробное объяснение можно найти в разделе «ANCHORING INCLUDE / EXCLUDE PATTERNS» страницы руководства rsync(1) .


Обратите внимание, что просто оставить лидирующий / не обязательно то, что вы хотите. Повторное цитирование с той же страницы man-страницы:

Неквалифицированное «foo» будет соответствовать имени «foo» в любом месте дерева, потому что алгоритм применяется рекурсивно из верхнего положения; он ведет себя так, как будто каждый компонент пути получает поворот в конце имени файла. Даже unanchored «sub / foo» будет соответствовать в любой точке иерархии, где «foo» был найден в каталоге с именем «sub». См. Раздел «АНКЕРЫ ВКЛЮЧЕНИЯ / ИСКЛЮЧЕНИЯ ПАТЕНТОВ» для полного обсуждения того, как указать шаблон, который соответствует корню передачи.

Таким образом, шаблон фильтра build/ будет соответствовать каталогу сборки в любом месте /home/ben , even /home/ben/many/sub/directories/build/ .

Я думаю, что ваши пути exclude должны быть относительно исходного пути. Вы можете попробовать это вместо этого?

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

Вот тест, для сравнения:

 /tmp$ tree src dest src ├── a └── b dest └── foo/ /tmp$ rsync -nav --exclude /tmp/src/b /tmp/src /tmp/dest sending incremental file list src/ src/a src/b $ rsync -nav --exclude b /tmp/src /tmp/dest sending incremental file list src/ src/a 

У меня была эта проблема в скрипте (я не знаю, если это ваш случай). Я был потому, что использовал эту команду в скрипте, и я использовал sh вместо bash. проверьте shebang в начале вашего скрипта.

  • Имеет ли опция сжатия -z с rsync ускорить резервное копирование
  • Перенос миллионов файлов с одного сервера на другой
  • Как я могу сделать rsync, который запрашивает подтверждение для каждого отдельного файла?
  • rsync: двоеточие в именах файлов
  • Какие корневые каталоги нужно создать резервную копию?
  • Загрузите с помощью rsync через bastion / jumper без изменений .ssh / config
  • Не удается передать ssh-соединение с помощью rsync
  • Экспортируйте плейлист m3u в каталог, чтобы они отображались в списке воспроизведения
  • Сломанная труба в моем rsync.sh
  • При использовании rsync необходимо передать конкретный файл перед другим
  • Содержимое Rsync tar с удаленным сервером
  • Interesting Posts

    как установить и использовать несколько параметров в одной переменной окружающей среды в рыбной раковине

    После создания предупреждения .deb: dpkg: warning при удалении каталог / usr / local / bin не пуст, поэтому не удаляется

    Как я могу увидеть пароль другого пользователя в Linux?

    Являются ли пакеты криптографически подписанными в Fedora 14?

    Как изменить файл хоста после входа в систему

    Как удаленно управлять установкой CentOS 5.4

    Как эффективно использовать Console2 с screen / tmux / byobu?

    Отслеживание, на котором дисковое пространство осталось на Linux?

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

    Что эквивалентно «apt list» во FreeBSD?

    Можно ли добавить Windows в мой загрузчик systemd-boot, если у меня есть отдельные разделы EFI?

    Как установить размер шрифта по умолчанию для всех приложений Qt5?

    Openvpn исключает ip в пуле

    как создать пользовательский сеанс рабочего стола для x2go

    Как хранятся большие каталоги (один индекс или много?)

    Linux и Unix - лучшая ОС в мире.