如何将“wget”输出流重定向到“sftp put”?

如何将“wget”输出流重定向到“sftp put”?

我尝试获取 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.

链接到 wget 文档

相关内容