Я использую 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
Правила глобального фильтра, начинающиеся с ведущего/
, привязаны к корню передачи. Цитата из раздела «ВКЛЮЧИТЬ / ИСКЛЮЧИТЬ ПРАВИЛА ШАБЛОНА» справочной страницы:По вашей команде (
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/
Более подробное объяснение можно найти в разделе «ЯКОРЬ ВКЛЮЧИТЬ / ИСКЛЮЧИТЬ РИСУНКИ»
rsync(1)
страницы руководства .Обратите внимание, что просто опустить ведущие
/
не обязательно то, что вы хотите. Цитируем снова из того же раздела справочной страницы:Таким образом, шаблон фильтра
build/
будет соответствовать каталогу сборки в любом месте/home/ben
, даже/home/ben/many/sub/directories/build/
.источник
rsync -a source destination
сам исходный каталог будет скопирован в место назначения. Это определяет, каким будет корень передачи для информирования выражения исключения. Правильное использование / в выражении исключения объясняется выше. Обратите внимание, в частности, чтоrsync --exclude='/dir1' source destination
ничего не исключает.Я думаю, что ваши
exclude
пути должны быть относительно исходного пути. Можете ли вы попробовать это вместо этого?Вот тест для сравнения:
источник
--verbose
команды, это формат, который вы должны использовать.У меня была эта проблема в сценарии (я не знаю, если это ваш случай). Я был, потому что я использовал эту команду в сценарии, и я использовал sh вместо bash. проверьте Шебанг в начале вашего сценария.
источник
Ваш шаблон исключения будет работать, если вы rsync весь путь / home, то есть без завершающей косой черты:
Но лучше только rsync содержимое папки с косой чертой:
Вы также можете использовать список игнорирования, см .: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders
источник
Чтобы исключить указанную папку с помощью rsync, вам нужно учитывать относительный путь в команде. в вашем случае:
где «ben» - папка, которую вы синхронизируете
источник