Получать файлы с сервера 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") 
  • Приостановка и перезапуск всех процессов Python
  • если условие с ssh выходит во время цикла без завершения
  • Как я могу запустить скрипт, когда интернет-соединение вот-вот потеряется?
  • Перейти на один уровень от несуществующего пути
  • Bash: подсчет значений значения в столбце x на основе значения в столбце y
  • Как выполнить сценарий оболочки при запуске Kali Linux?
  • Вставить пробел между цифрой и алфавитом в определенном столбце
  • Найти и для цикла
  • Как скопировать файл в сценарий bash и переименовать его во время копирования и поместить его в тот же каталог
  • Как настроить скрипт для выполнения, когда порт получает сообщение
  • bash - определяющие переменные с VAR = $ {: - по умолчанию}
  • Interesting Posts

    Создание логического тома с использованием не LVM-раздела

    Как установить несколько программ командной строки java?

    Проблемы с Maple 16 GUI в Arch Linux

    Сервер Debian с 3-мя сетевыми интерфейсами. Связь с 3-мя различными подсетями IP.

    Что это значит, когда процессы «Время» остановились сверху?

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

    Получить PID функции, выполняемой в фоновом режиме

    journalctl: как предотвратить усечение текста в терминале

    Как отслеживать во время выполнения символы загруженной разделяемой библиотеки?

    Могу ли я установить тайм-аут bash только для виртуальных консолей (ctrl + alt + {f1-f6})

    Индикатор состояния Vimperator

    Выходной трафик на разных интерфейсах на основе порта назначения

    запускать несколько экземпляров MySQL CentOS7

    Короткое чтение при попытке открыть / dev / sda2

    Как запустить два виртуальных экрана X11 на одном мониторе?

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