rsync (cwrsync) в Gitbash — источник и место назначения не могут быть одновременно удаленными. [Windows 7]

Я пытаюсь синхронизировать локальный путь с другим диском с помощью Git Bash в Windows 7. Я скачал cwRsync и скопировал файлы в каталог Git bash bin. Я могу запустить rsync, но следующая команда вызывает у меня проблемы

rsync -av /c/00-dev/05-batch /f/RSYNC/ Источник и место назначения не могут быть одновременно удаленными. Ошибка rsync: ошибка синтаксиса или использования (код 1) в main.c(1135) [получатель=3.0.6]

Оба пути правильные, но они не синхронизируются.


person Reptile    schedule 29.04.2015    source источник


Ответы (3)


Обходной путь: cd в /c и rsync с использованием относительных путей.

Итак, это работает:

cd /c
touch temp/test.txt
rsync temp/test.txt temp/test2.txt

в то время как это не так, даже если вы cd до /c:

$ rsync /c/temp/test.txt /c/temp/test2.txt
The source and destination cannot both be remote.

Протестировано с помощью Git Bash, поставляемого с git 2.9.0.windows.1.

person Jon Olav Vik    schedule 21.07.2016
comment
Хороший ответ, но он не работает при синхронизации между разными дисками. - person Liakos; 23.05.2021

В Windows я попробовал cwRsync для синхронизации данных между папками, расположенными на Z: (сетевой диск) и D: (флешка), за исключением подпапки «Данные»:

rsync -r -v --size-only --dry-run --exclude=Data --chmod=ugo=rwX /cygdrive/z/"Scan folder"/"Sub folder" /cygdrive/d/"Scan folder"/"Sub folder"

-r означает рекурсивно, -v подробный вывод, --dry-run только для тестирования (данные не передаются), --exclude исключает вложенные папки или файлы, --chmod=ugo=rwX устанавливает правильные разрешения (подробнее о разрешениях здесь с комментариями)

Для кириллицы в Windows используйте 'chcp 65001'.

person Rapekas    schedule 27.08.2020
comment
Хороший ответ, но он не работает из git-bash из-за преобразования пути. - person Liakos; 23.05.2021

Это работает с использованием cwRsync из Git Bash.

export MSYS_NO_PATHCONV=1
rsync -av /cygdrive/c/00-dev/05-batch /cygdrive/f/RSYNC/

cwRsync.exe требуется /cygdrive/<drive-letter> для абсолютного пути, поэтому простой rsync -av /cygdrive/c/00-dev/05-batch /cygdrive/f/RSYNC/ работает из cmd .

Однако Git Bash преобразует пути вроде .../c/... в странные вещи вроде ...C:\.... Строка: export MSYS_NO_PATHCONV=1 предотвращает это преобразование. (Подробнее: Как остановить MinGW и MSYS от искажения имен путей, заданных в командной строке).

Используйте unset MSYS_NO_PATHCONV в скрипте, чтобы восстановить стандартное поведение Git Bash.

person Liakos    schedule 23.05.2021