![如何将“wget”输出流重定向到“sftp put”?](https://linux22.com/image/175695/%E5%A6%82%E4%BD%95%E5%B0%86%E2%80%9Cwget%E2%80%9D%E8%BE%93%E5%87%BA%E6%B5%81%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E2%80%9Csftp%20put%E2%80%9D%EF%BC%9F.png)
我尝试获取 wget 的输出流并将其通过管道传输到 sftp put,(wget|sftp),但这不起作用,我们该怎么做?,条件是
我不想将流作为文件保存在本地服务器中。
这真的可能吗?我们可以使用 wget | 来做到这一点ssh,.我有以下命令来执行 sftp 并输入单个命令。
sftp user@serverName:/tmp <<< $'put ./fileName'
答案1
编辑:TL;DR 你不能用 openssh 的sftp
客户端来做到这一点,但你可以使用curl的 sftp 实现,如 Aditya Shaw 发现的这个答案所示:
https://serverfault.com/questions/400203/how-to-pipe-data-to-sftp-connection/934153#934153
基本上,
$ wget -O - google.com | curl -T - -u remote_user sftp://remote_server/home/remote_user/fileName
结束编辑
看来不可能。我尝试过:
$ wget -O - google.com | sftp -b <(printf "%s\n" 'put /dev/stdin ./fileName') localhost
但似乎sftp
无法从非常规文件(如管道)复制:
sftp> put /dev/stdin ./fileName
/dev/stdin is not a regular file
你能做的最接近的事情可能是:
$ sftp -b <(printf "%s\n" 'put /dev/stdin ./fileName') localhost < =(wget -O - google.com)
这使用了 zsh 的=()
进程替换,它在技术上将内容保存为 中的文件/tmp
,因此它不符合您的条件。不过,当命令完成时,zsh 会自动删除它。
答案2
wget
有它的命令行参数。
所以这
wget -O - yourlink
将把 wget 输出发送到stdout
.现在,您可以将其重定向到任何您喜欢的地方。
这里-O -
将下载的文件发送到stdout
.