我试图将主目录更新为备份计算机
rsync -avru --exclude-from='/home/me/exclude-me.txt' /home/me/* [email protected]:/home/assistant/* -p 2222
但得到一个错误
Unexpected remote arg: [email protected]:
rsync error: syntax or usage error (code 1) at main.c(1361) [sender=3.1.2]
我的代码有什么问题?
对于选项意味着保留权限
rsync
并且不带参数。因此,您的命令无法正确解析,并且出现错误。-p
如果要更改
rsync
应连接的 SSH 端口,请使用以下命令。目标不应有任何通配符。最好根据需要学习使用尾随 / 或不使用。
rsync 默认使用 ssh 进行远程连接至少十年了。无需指定 -e 任何内容。端口可以添加到 URL - userid@remote-server:port/path/to/target/ 。如果用户标识与源计算机相同,则不需要。
由于默认使用 ssh,因此使用 ~/.ssh/config 文件来处理非标准设置,例如备用端口、不同的用户 ID 或不同的键,会使 rsync 命令更简单。当 DNS 名称难看或也只能使用 IP 时,使用名称很方便。我发现配置文件是一个很好的方法,可以在一个有用的文件中记录我拥有帐户、登录名和使用非标准端口的所有外部系统。
但这更多是关于 ssh-fu,而不是 rsync-fu。
rsync 手册页非常全面。许多人发现 explainshell.com 对 rsync 或 find 等复杂命令很有帮助。如果将原始命令插入 explainshell,-p 会作为问题跳出。
因此,经过上述简化(尤其是使用 ~/.ssh/config 文件,命令变为:
我会将用户 ID、不友好的主机名、端口放入配置中,然后这样做:
~/* 或 /home/me/* 将丢失以句点开头的任何内容,例如配置文件和 ~/.config/ 目录。如果你想要这些,你应该这样做,那么需要一个特定的正则表达式,或者只使用 /home/me 作为源而不使用任何正则表达式模式。看上面。请注意我没有在目标上指定任何目录?默认情况下,使用用户 ID 的 HOME。并且不要忘记 --dry-run 选项:
如果目标是每日备份,也许使用带有版本备份的工具会有意义吗?