目前我正在创建一个备份文件并使用curl
以下命令将其发送到远程主机:
tar -cvzf - ./folder | curl -u user:pwd ftp://example.com/folder/backup.tar.gz --ftp-create-dirs -T -
我也想发送相同的文件到一个不同的目的地于同一主机(实际上,在同一个文件夹中,但其中一个的文件名中有日期戳,另一个没有)。
目前我只是运行了上述(包括tar
)两次,每次指定不同的目的地。这显然没问题,但不是最优的。
是否可以“分叉”输出tar
并将其发送到两个不同的curl
命令?
或者,也许就远程主机的带宽而言更有效,将文件传输到主机一次,然后就地复制?
答案1
您可以使用tee
将标准输出克隆到文件,然后curl
在第一个完成后运行第二个。或者您可以只更改tar
参数以将备份保存到本地文件,然后运行两个curl
进程将其传输到远程主机。这两种解决方案在带宽、速度和本地磁盘空间方面都不是很好。
我认为最好的解决方案是传输一次文件,然后就地复制。您可以ssh
使用公钥认证而不是curl
避免暴露用户密码并在远程主机上轻松克隆文件:
tar -cvzf - ./folder | ssh -i ~user/.ssh/id_dsa [email protected] 'tee /folder/backup_datestamp.tar.gz | dd of=/folder/backup.tar.gz'
如果您没有本地用户,您可以更改本地主机上的私钥位置用户(并且不要忘记将公钥复制到远程主机以成功进行身份验证)。您还可以在远程主机的命令中dd of=file1 ; cp file1 file2
使用而不是使用。tee