Я попытался взять выходной поток wget и направить его в sftp put, (wget|sftp), но это не сработало. Как мы можем это сделать?, условие
Я не хочу сохранить поток локально на моем сервере в виде файла.
Это действительно возможно? Мы можем сделать это с помощью wget | сш,. У меня есть команда ниже, чтобы сделать sftp и ввести одну команду.
sftp user@serverName:/tmp <<< $'put ./fileName'
РЕДАКТИРОВАТЬ :TL;DR Вы не можете сделать это с помощью клиента openssh sftp
, но вы можете с реализацией sftp curl, как показано в этом ответе, найденном Адитьей Шоу:
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 автоматически удаляет его по завершении команды.
wget
имеет аргументы строки команды -для этого.
Итак, это
wget -O - yourlink
отправит вывод wget на stdout
. Теперь вы можете перенаправить его куда угодно.
Здесь -O -
отправляет загруженный файл на stdout
.