我正在尝试为本地(Mac OS X)计算机编写一个简单的bash脚本,以便将文件从我的计算机上的目录移动到远程计算机。这条线路失败了:
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
,它位于机器的根目录中),而是使用我的工作目录。造成这种情况的原因是什么?
答案 0 :(得分:37)
检查你的\字符在行尾之后没有空格,因为这会导致BASH无法正确解释换行符,从而导致rsync错误
答案 1 :(得分:5)
删除' *'如果您指定' /'从源位置,rsync知道在目录内部查找最后
像那样:rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/ $DEV_SERVER:$REMOTE_DIR
答案 2 :(得分:0)
我在做一些 rsync 工作时遇到了同样的错误。我在指定选项时使用了错误的字符,我必须从其他地方复制和粘贴命令获得这些选项:
−
而不是下面的正确字符:
-
答案 3 :(得分:-1)
此:
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以不同于命令行的方式解释\
字符,或者在它之后可能存在隐含的非空白字符。