Получать файлы с сервера SFTP и управлять ими в памяти

Есть ли способ BASH , который может получить доступ к SFTP-серверу, «получить доступ» к файлу и не загружать его, читать его в буфере , манипулировать содержимым, а затем хранить его локально.

Я знаю, что это можно сделать с помощью Perl-скрипта.

@file=$sftp->get($file);

Я ищу аналогичный подход в bash.

Цель состоит в том, чтобы уйти от скрипта Perl и реализовать функциональность в bash.

благодаря

2 Solutions collect form web for “Получать файлы с сервера SFTP и управлять ими в памяти”

С libcurl с поддержкой sftp :

  curl sftp://sftp.example.com -o - | do_some_magic > filename 


Я испытал завиток в этих дистрибутивах Linux / Unix:

libcurl со встроенной поддержкой sftp: RHEL6, RHEL7

Без: RHEL5, Ubuntu 11.04, Ubuntu 14.04, Solaris 11

Вы не можете получить доступ к удаленному файлу без его загрузки, но вы можете загрузить удаленный файл, не сохраняя его в локальной файловой системе. Не с самим bash, который не включает поддержку SFTP, а с утилит командной строки.

Клиент sftp из OpenSSH, похоже, не может этого сделать: он настаивает на том, чтобы получить доступное для поиска место вывода, которое исключает возможность его передачи в подстановку команд.

Curl может загружать файл в стандартный вывод , но он не всегда построен с поддержкой SFTP (он запускается как HTTP-загрузчик).

Поскольку вы уже знаете, как это сделать в Perl, вы можете просто запустить Perl.

Кроме того, смонтируйте удаленную файловую систему через SSHFS , а затем получите доступ к ней с помощью любой команды, такой как cat .

 mkdir foo sshfs example.com:/path/to/directory foo content=$(cat foo/somefile) fusermount -u foo rmdir foo 

Альтернативно, делайте что-то «обычным» способом оболочки. Оболочки не предназначены для обработки воображаемых данных в памяти, они в основном хороши в выполнении других команд и работе с файлами. Работа с содержимым файла обычно связана с конвейерами, а иногда и с временными файлами.

 my_tmp_dir= trap 'rm -rf "$my_tmp_dir"' EXIT INT HUP my_tmp_dir=$(mktemp -d) echo 'get remotefile localfile' | { cd "$my_tmp_dir" && sftp -q; } content=$(cat "$my_tmp_dir/localfile") 
  • Помогите мне понять, почему эта функция bash не работает рекурсивно
  • печать цветного текста с использованием эха
  • условие && command + exit
  • Найти все папки в каталоге с тем же контентом
  • Что делает этот оператор `cat`?
  • Что означает «$ {- # * i}"! = "$ -" означает?
  • Какая цель переназначает переменную себе через эхо?
  • печать специальных символов в awk-выходе
  • Udev запускает сценарий спящего режима
  • Как разбить цикл bash на выход внутреннего скрипта?
  • Запустите контейнер Docker и откройте веб-браузер на хосте
  • Interesting Posts

    Гибридный код в сценариях оболочки. Обмен переменными

    Можно ли запустить графическую программу на рабочем столе другого пользователя с правами root?

    Могу ли я объединить два раздела с точек монтирования dfferent / dev / sda в один раздел?

    показать имя хоста в верхней части

    Могу ли я подключать stdout на одном сервере к stdin на другом сервере?

    vim прекращает отправку текста в регистр * (X11)?

    Fedora 15: что-то странное происходит с yum

    Проблема с установкой синаптики из командной строки

    изменение разделителей столбцов в файле

    Есть ли какой-либо инструмент для создания содержимого динамического файла?

    заголовок сценария оболочки для лучшей совместимости

    Заменить команду как переменную в скрипт bash

    функция forward и переменные в sudo su – <user> << EOF

    Настройка темы GTK2 для root

    Почему не следует сообщать, что родительский shell fork () дочерний процесс перед execve () командой?

    Linux и Unix - лучшая ОС в мире.