Не работает каталог 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 . Что я делаю не так?

  • rsync-подобный инструмент, поддерживающий сжатие и поддерживающий hardlinks?
  • Как сделать резервную копию всех моих данных?
  • Rsync только новые файлы с удаленного сервера
  • Снимки с большими изменениями файлов
  • rsync: продолжить или в произвольном порядке
  • Удаленный ПК, доступный с помощью ssh, scp / rsync, не работает (больше)
  • В чем разница между `dd`,` cp` и `rsync`?
  • Как я могу исключить файлы по умолчанию с помощью 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 в начале вашего скрипта.

    Interesting Posts

    В чем смысл ^ [OP в терминале?

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

    Новичок борется с grep, sed, awk для фильтрации html

    отправка текстового ввода на отдельный экран

    Невозможно установить LibreOffice из-за проблемы зависимости

    разделение с использованием 2 жестких дисков (SSD и не SSD) в Linux

    Когда начинается своп? Когда процесс выдает ошибку из памяти и убивается?

    Возможно ли p2v автономная Linux-система для рабочей станции VMware?

    32-разрядный пакет из репо, который должен содержать только 64-битные пакеты

    inotifywait недопустимый параметр -d (демон)

    Моя команда `which` может быть неправильной (иногда)?

    Readline .inputrc сбрасывает значения по умолчанию с каждой строкой

    Что такое «время инициализации» в команде find?

    Yum ничего не делает (Unresponsive) при установке любого пакета или обновления

    В чем смысл локального в этом примере

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