抑制 rsync 警告但不抑制错误

抑制 rsync 警告但不抑制错误

我使用rsync没有主目录的帐户从一台服务器传输到另一台服务器:

rsync user@server:source target
Password:
Could not chdir to home directory /dev/null: Not a directory
bash: /dev/null/.bashrc: Ist kein
Verzeichnis

既然rsync是成功的,我认为警告消息而不是错误说明原因的消息rsync 失败的

有没有一种(简单的)方法可以rsync告诉仅有的打印错误(如果确实有)失败的

答案1

可以说是Could not chdir to home directory消息一个错误。

这不是一个函数,rsync可以在类似的场景中看到(nohome是我创建的没有主目录的帐户):

ssh nohome@localhost date
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
Thu  1 Aug 07:02:05 UTC 2019

我找不到一种方法来抑制该消息(ssh -q并且rsync -q两者都没有相关效果)。

至于rsync,它甚至看不到该消息。如果所有项目都成功传输,则退出状态rsync为 SUCCESS (0) - 无论是否缺少主目录:

touch /tmp/x
rsync -av nohome@localhost:/tmp/x /tmp/y; echo Status=$?
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
receiving incremental file list
x

sent 43 bytes  received 83 bytes  50.40 bytes/sec
total size is 0  speedup is 0.00
Status=0

答案2

好吧,我自己刚刚找到了一个解决方案:

if ! output=$(rsync user@server:source target 2>&1); then
  echo "$output"
fi

输出(stdout 和 stderr)保存在一个变量中,如果退出代码不为 0,则仅打印该变量。

不确定是否有更好的方法,但这绝对适合我。

背景

用户实际上是一个机器帐户,并且实际帐户rsync是通过接受文件 ( /etc/machine.secret) 作为密码的包装器脚本调用的。脚本本身是通过运行的,cron所以我必须找到一种当且仅当出现问题时才能获取邮件的方法。

不执行任何操作意味着每次调用脚本时我都会收到“错误”邮件,执行相当简单的操作2>/dev/null意味着我根本不会收到任何错误邮件,因此我必须找到一种方法来过滤掉该特定消息。

答案3

你尝试过-q开关吗?它抑制非错误消息。

rsync -q user@server:source target

相关内容