] Это должно работать для всех имен файлов в текущем каталоге.[
] [sh -c "$(printf 'stat -- "$1";file -- "$1";shift%.0b\n' *)" -- *
] Невозможно получить доступ к удаленному файлу без его загрузки, но можно загрузить удаленный файл, не сохранив его в локальной файловой системе. Не с помощью самого 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")
С помощью libcurl с поддержкой sftp:
curl sftp://sftp.example.com -o - | do_some_magic > filename
libcurl со встроенной поддержкой sftp: RHEL6, RHEL7
Without: RHEL5, Ubuntu 11.04, Ubuntu 14.04, Solaris 11