将重试命令与 rsync 一起使用

A. *_*Que 5 rsync

retry与 配对时出现命令问题rsyncretry是一个Debian 软件包,并声明它可以“重复命令,直到满足条件,通常会成功。”。rsync尝试在有时会失败的连接上使用它。但是它总是给出相同的错误giving up: No such file or directory::

retry '/usr/bin/rsync -av source destination'
retry: Could not execute 'rsync -av source destination', giving up: No such file or directory
Run Code Online (Sandbox Code Playgroud)

source和两者都destination存在。我尝试过使用绝对路径、单引号和双引号、路径周围的引号以及路径作为变量,但都不起作用。我可以使用此解决方案中的方法,但在执行多个目录时相当麻烦。我有什么遗漏的吗?

avi*_*iro 9

问题是retry尝试执行一个名为'/usr/bin/rsync -av source destination'(包括中间的空格)的文件。

为了知道retryrsync是命令,并且-avsource、 和destination是属于该rsync命令的参数,您需要按以下方式运行它:

retry -- /usr/bin/rsync -av source destination
Run Code Online (Sandbox Code Playgroud)

--您需要(双破折号)的原因是表示命令选项的结束和位置参数的开始。如果没有--前面的命令,retry会认为这-av是它的命令选项之一,并会抛出以下错误:

retry: invalid option -- 'a'
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 8

我在这里可以看到两个或三个问题。(感谢您提供的链接retry;我以前没有遇到过它。)

\n
    \n
  1. 目标命令被“像往常一样”解析,命令与其每个参数之间有空格。引用整个命令意味着retry将尝试将其作为不带任何参数的命令执行:

    \n
    retry 'rsync -av src dst'\nretry: Could not execute 'rsync -av src dst', giving up: No such file or directory\n
    Run Code Online (Sandbox Code Playgroud)\n

    这里的修复是避免引用整个命令及其参数。

    \n
  2. \n
  3. 删除引号仍然会产生错误,但这一次是因为retry尝试处理-av用于 `rsync: 的参数:

    \n
    retry rsync -av src dst\nretry: invalid option -- 'a'\n\xe2\x80\xa6\n
    Run Code Online (Sandbox Code Playgroud)\n

    --这里的修复方法是在特定的部分之后使用双破折号 ( ) retry,以便它停止尝试处理更多参数:

    \n
    retry -- rsync -av src dst\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. 运行此命令成功完成将导致您最终得到src以下结果dst

    \n
    ls dst\nsrc\n
    Run Code Online (Sandbox Code Playgroud)\n

    如果您想要thendst的内容,src请在 上添加尾部斜杠src/

    \n
    retry -- rsync -av src/ dst\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
\n