shell脚本

时间:2017-12-18 21:01:15

标签: shell remote-access git-bash remote-server robocopy

我正在尝试使用robocopy将文件移动到远程计算机。这是在Windows机器上通过在Git Bash中执行的文件script.sh完成的。

背景

首先我使用net use添加共享目录:

NET USE \\\\$DEPLOY_SERVER\\$DEPLOY_SHARE /user:$DEPLOY_SERVER\\$DEPLOY_USER $DEPLOY_PASS

这很好用。

问题

然后我用robocopy复制文件:

robocopy . \\\\$DEPLOY_SERVER\\$DEPLOY_SHARE\\$DEPLOY_DIR /MIR

错误代码16 而失败。

the robocopy docs开始,16是Serious error. Robocopy did not copy any files.Either a usage error or an error due to insufficient access privileges on the source or destination directories.

在没有/MIR的情况下运行它没有错误。

错误日志

使用/MIR运行时出现错误:

-------------------------------------------------------------------------------
ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------    
Started : Mon Dec 18 15:46:26 2017    
Source - C:\<path to current dir>\
 Dest - \\<deploy server>\<deploy share>\<deploy dir>\    
Files :
Options : /COPY:DAT /R:1000000 /W:30    
------------------------------------------------------------------------------    
ERROR : Invalid Parameter #3 : "C:/Users/<my user>/AppData/Local/Programs/Git/MIR"    
   Simple Usage :: ROBOCOPY source destination /MIR    
         source :: Source Directory (drive:\path or \\server\share\path).
    destination :: Destination Dir  (drive:\path or \\server\share\path).
           /MIR :: Mirror a complete directory tree.    
For more usage information run ROBOCOPY /?    
****  /MIR can DELETE files as well as copy them !

进一步的错误说明

对于任何选项都会发生这种情况,而不仅仅是/MIR,这只是错误的最简单形式。

我读过许多与此非常相似的问题,常见的答案是在有空格的情况下将路径放在双引号中。我的路径没有空格,但我也尝试过,并得到了相同的错误。此外,这会导致robocopy输出中的“Source”和“Dest”路径不正确,但它们对我来说是正确的。

我不知道为什么我会去那个git目录并寻找MIR,或者为什么它不只是正确地解析选项。此外,我检查了MIR内部C:/Users/<my user>/AppData/Local/Programs/Git/不存在。

研究

其他类似的但对我没有帮助的问题:

结论

任何帮助将不胜感激!我也愿意使用robocopy之外的其他内容,但它需要使用远程计算机,可以从shell脚本运行,支持镜像,而不是使用ssh({{1}适用于robocopy,所以理想情况下就像其他东西一样。)

3 个答案:

答案 0 :(得分:1)

在需要管理员privileges/或弹出将文件创建到该目录时会发生

因此,尝试建立一个log/temp目录,并尝试将log文件添加到该log目录

mkdir log\
e.g: robocopy . \\\\$DEPLOY_SERVER\\$DEPLOY_SHARE\\$DEPLOY_DIR 
/log:"\\$ServerShare\log\copy_log.log"

答案 1 :(得分:0)

我最后只使用了一个不同的工具,该工具是脚本用于

的更大系统的一部分

答案 2 :(得分:0)

我通过用一个额外的正斜杠转义/ MIR参数来使其工作:

robocopy "C:\source" "C:\destination" //MIR

希望这会有所帮助;)