Curl

有效地將文件傳輸到兩個目的地

  • October 10, 2018

目前我正在創建一個備份文件並將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

引用自:https://unix.stackexchange.com/questions/474447