将重试命令与 rsync 一起使用

将重试命令与 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

source和两者都destination存在。我尝试过使用绝对路径、单引号和双引号、路径周围的引号以及路径作为变量,但都不起作用。我可以使用以下方法这个解决方案但是做多个目录的时候就比较麻烦了。我有什么遗漏的吗?

答案1

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

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

retry -- /usr/bin/rsync -av source destination

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

retry: invalid option -- 'a'

答案2

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

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

    retry 'rsync -av src dst'
    retry: Could not execute 'rsync -av src dst', giving up: No such file or directory
    

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

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

    retry rsync -av src dst
    retry: invalid option -- 'a'
    

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

    retry -- rsync -av src dst
    
  3. 运行此命令成功完成将导致您最终得到src以下结果dst

    ls dst
    src
    

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

    retry -- rsync -av src/ dst
    

相关内容