Curl
有效地將文件傳輸到兩個目的地
目前我正在創建一個備份文件並將
curl
其發送到遠端主機,使用:tar -cvzf - ./folder | curl -u user:pwd ftp://example.com/folder/backup.tar.gz --ftp-create-dirs -T -
我還想將相同的文件發送到**同一主機上的不同目的地(實際上,在同一個文件夾中,但一個文件名中有日期戳,另一個沒有)。
目前我只是執行上述(包括
tar
)兩次,在每個中指定不同的目的地。這顯然沒問題,但不是最理想的。是否可以“分叉”輸出
tar
並將其發送到兩個不同的curl
命令?或者,就遠端主機的頻寬而言,更有效的是,將文件傳輸到主機一次,然後就地複制?
您可以使用
tee
將標準輸出複製到文件,然後curl
在第一個完成後執行第二個。或者您可以更改tar
參數以將備份保存到本地文件,然後執行兩個curl
程序將其傳輸到遠端主機。這兩種解決方案在頻寬、速度和本地磁碟空間方面都不是很好。我認為最好的解決方案是傳輸一次文件,然後就地複制。您可以使用
ssh
公鑰身份驗證,而不是curl
避免在遠端主機上暴露使用者密碼和輕鬆文件複製:tar -cvzf - ./folder | ssh -i ~user/.ssh/id_dsa user@example.com 'tee /folder/backup_datestamp.tar.gz | dd of=/folder/backup.tar.gz'
如果您沒有本地使用者使用者,您可以在本地主機上更改私鑰位置(並且不要忘記將公鑰複製到遠端主機以成功驗證)。您也可以在遠端主機的命令中使用
dd of=file1 ; cp file1 file2
而不是使用tee
。