我使用以下命令将文件复制到远程主机scp
,然后在远程主机上复制该文件以创建附加日期戳版本:
scp myfile.tar.gz [email protected]:/root/myfolder
ssh [email protected] "cd /root/myfolder && cp myfile.tar.gz myfile_2020-06-23.tar.gz"
但是,有没有一种方法可以一步实现这一目标,而无需额外的远程复制(对于大文件来说,这需要一些时间)?我正在考虑在管道传输ssh
和使用时可以执行的操作,cat - | tee
如下所示:
... | ssh [email protected] "cat - | tee myfile.tar.gz > myfile_2020-06-23.tar.gz"
我想表达这个问题的另一种方式是......我如何通过管道将.tar.gz
文件传输到远程主机ssh
?这样,我可以通过管道myfile.tar.gz
并ssh
使用上述技巧同时写入两个文件,而不是使用scp
and then cp
。
答案1
假设远程服务器接受典型的 unix 命令,你可以这样做:
cat myfile.tar.gz | ssh [email protected] \
"cd /root/myfolder && tee myfile.tar.gz > myfile_2020-06-23.tar.gz"
cat
不需要在远程服务器上运行。cat
在本地服务器上运行也不是真正必要的——您可以这样做:
ssh [email protected] \
"cd /root/myfolder && tee myfile.tar.gz > myfile_2020-06-23.tar.gz" \
< myfile.tar.gz
^^^^^^^^^^^^^^^-- Redirect from the file
如果需要,您甚至可以通过管道tar
将其输出:ssh
tar czf - myfiles | ssh [email protected] \
"cd /root/myfolder && tee myfile.tar.gz > myfile_2020-06-23.tar.gz"