高效地将文件传输到两个目的地

高效地将文件传输到两个目的地

目前我正在创建一个备份文件并使用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

相关内容