Ответ 1
Убедитесь, что ваши\символы не имеют пробелов после этого в конце строки, потому что это приведет к тому, что BASH не будет правильно интерпретировать перенос строки, указав ошибку rsync выше
Я пытаюсь написать простой bash script для моей локальной (Mac OS X) машины для перемещения файлов из каталога на моем компьютере на удаленную машину. Эта строка не работает:
rsync --verbose --progress --stats --compress --rsh=ssh \
--recursive --times --perms --links --delete \
--exclude "*bak" --exclude "*~" \
/repository/* $DEV_SERVER:$REMOTE_DIR
$DEV_SERVER
и $REMOTE_DIR
определены ранее, и я повторяю их, чтобы убедиться, что они точны.
Ошибка, которую я получаю:
rsync: link_stat /Users/myusername/mycurrentdirectory failed: No such file or directory (2)
Следует отметить, что вместо использования определенного каталога (/repository
, который находится в корневой части машины), он использует мой рабочий каталог. Что вызывает это?
Убедитесь, что ваши\символы не имеют пробелов после этого в конце строки, потому что это приведет к тому, что BASH не будет правильно интерпретировать перенос строки, указав ошибку rsync выше
Удалите '*' из исходного местоположения, rsync знает, что нужно посмотреть внутри каталога, если вы укажете '/' в конце
вот так:
rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/ $DEV_SERVER:$REMOTE_DIR
Это:
rsync --verbose --progress --stats --compress --rsh=ssh \
--recursive --times --perms --links --delete \
--exclude "*bak" --exclude "*~" \
/repository/* $DEV_SERVER:$REMOTE_DIR
должно быть следующим:
rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/* $DEV_SERVER:$REMOTE_DIR
Bash интерпретирует символ \
иначе, чем в командной строке, или, возможно, после него появляется неявный символ без пробелов.