我尝试将主目录更新到备份计算机
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]
我的代码有什么问题?
答案1
为了rsync
-p
意味着保留权限并且不接受参数。因此,无法正确解析您的命令,并且会收到错误。
如果要更改rsync
要连接的 SSH 端口,请使用以下命令。
rsync -avru --exclude-from='/home/me/exclude-me.txt' -e 'ssh -p 2222' \
/home/me/ \
[email protected]:/home/assistant/
答案2
目标不应包含任何通配符。最好学会根据需要使用或不使用尾随的 /。
rsync 中的 -p 是权限,而不是端口。来自手册页: -p, --perms 保留权限
rsync 默认使用 ssh 进行远程连接至少已有十年了。无需指定 -e 任何内容。端口可以添加到 URL - userid@remote-server:port/path/to/target/ 。如果用户 ID 与源计算机相同,则不需要。
由于默认使用 ssh,因此使用 ~/.ssh/config 文件来处理非标准设置(如备用端口、不同的用户 ID 或不同的密钥)可使 rsync 命令更简单。当 DNS 名称不美观或只能使用 IP 时,使用名称会很方便。我发现配置文件是一种很好的方式,可以记录我拥有帐户、登录名和使用非标准端口的所有外部系统。
rsync 有两种不同的方式联系远程系统: 使用远程 shell 程序作为传输(例如 ssh 或 rsh)或 通过 TCP 直接联系 rsync 守护进程。远程 shell 传输 当源路径或目标路径包含单个 主机规范后的冒号(:)分隔符。
但这更多是关于 ssh-fu,而不是 rsync-fu。
rsync 手册页非常全面。许多人发现 explainshell.com 对于 rsync 或 find 等复杂命令很有帮助。如果您将原始命令插入 explainshell,-p 就会跳出问题。
因此,经过上述简化(尤其是使用 ~/.ssh/config 文件),命令变为:
$ rsync -avru --exclude-from='/home/me/exclude-me.txt' ~/*[电子邮件保护]:2222/主页/助理/
我会将用户 ID、不友好的主机名、端口放入配置中,然后按如下方式执行:
$ rsync -avz --exclude-from='/home/me/exclude-me.txt' ~/backsrv:
~/* 或 /home/me/* 将丢失以句点开头的任何内容,例如配置文件和 ~/.config/ 目录。如果您想要这些,并且应该需要,则需要特定的正则表达式,或者只需使用 /home/me 作为源,而无需任何正则表达式模式。参见上文。请注意我没有在目标上指定任何目录?默认情况下,使用用户 ID 的 HOME。并且不要忘记 --dry-run 选项:
-n, --dry-run 执行无 所做的更改
如果目标是进行每日备份,那么使用具有版本化备份的工具是否有意义?