wgetの出力ストリームを取得してsftp put(wget | sftp)にパイピングしようとしましたが、うまくいきません。どうすればいいですか? 、要求事項は
ストリームをローカルサーバーにファイルとして保存したくありません。
これは本当に可能ですか? wget | sshを使用してこれを行うことができます。 sftpを実行して単一のコマンドを入力するコマンドがあります。
sftp user@serverName:/tmp <<< $'put ./fileName'
答え1
編集:TL; DR opensshのクライアントではこれを行うことはできませんが、sftp
Aditya Shawが見つけたこの回答に示すように、curlのsftp実装を使用できます。
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のファイルとして保存するzshのプロセスオーバーライドを使用するため、/tmp
基準を満たしていません。ただし、zsh はコマンドが完了すると自動的に削除します。
答え2
wget
コマンドラインパラメータがあります。
だからこれ
wget -O - yourlink
これで、wget出力をstdout
好きな場所にリダイレクトできます。
-O -
ダウンロードしたファイルをここに送信してくださいstdout
。