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

[

] Это должно работать для всех имен файлов в текущем каталоге.[

] [
sh -c "$(printf 'stat -- "$1";file -- "$1";shift%.0b\n' *)" -- *
]
1
08.01.2015, 21:11
2 ответа

Невозможно получить доступ к удаленному файлу без его загрузки, но можно загрузить удаленный файл, не сохранив его в локальной файловой системе. Не с помощью самого 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")
0
27.01.2020, 23:37

С помощью libcurl с поддержкой sftp:

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


Я протестировал curl на этих дистрибутивах Linux/Unix:

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

Without: RHEL5, Ubuntu 11.04, Ubuntu 14.04, Solaris 11

2
27.01.2020, 23:37

Теги

Похожие вопросы