Linux

使用 scp 將文件複製並複製到遠端主機

  • June 24, 2020

我正在使用以下內容將文件複製到遠端主機scp,然後將該文件複製到遠端主機上以創建額外的帶日期戳的版本:

scp myfile.tar.gz username@xx.xxx.xx.xxx:/root/myfolder
ssh username@xx.xxx.xx.xxx "cd /root/myfolder && cp myfile.tar.gz myfile_2020-06-23.tar.gz"

但是有沒有一種方法可以一步完成,而不需要額外的遠端複製(對於大文件,這需要一些時間)?我正在考慮在管道到ssh和使用時可以做什麼,cat - | tee如下所示:

... | ssh username@xx.xxx.xx.xxx "cat - | tee myfile.tar.gz > myfile_2020-06-23.tar.gz"

我想表達這個問題的另一種方式是……我如何通過管道將.tar.gz文件傳輸到遠端主機ssh?這樣,我可以通過管道myfile.tar.gz傳輸ssh並使用上述技巧同時寫入兩個文件,而不是使用scpand then cp

假設遠端伺服器接受典型的 unix 命令,您可以這樣做:

cat myfile.tar.gz | ssh username@xx.xxx.xx.xxx \
       "cd /root/myfolder && tee myfile.tar.gz > myfile_2020-06-23.tar.gz"

cat不需要在遠端伺服器上執行。在本地伺服器上執行cat也不是必需的——你可以這樣做:

ssh username@xx.xxx.xx.xxx \
       "cd /root/myfolder && tee myfile.tar.gz > myfile_2020-06-23.tar.gz" \
       < myfile.tar.gz
       ^^^^^^^^^^^^^^^-- Redirect from the file

如果你願意,你甚至可以通過管道輸出tarinto :ssh

tar czf - myfiles | ssh username@xx.xxx.xx.xxx \
       "cd /root/myfolder && tee myfile.tar.gz > myfile_2020-06-23.tar.gz"

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