Tem algumaBASHmaneira que é capaz de acessar um servidor SFTP, "acessar" um arquivo e sem baixá-lo lê-lo em umamortecedor, manipule o conteúdo e armazene-o localmente.
Eu sei que isso pode ser feito usando um script perl.
@file=$sftp->get($file);
Estou procurando uma abordagem semelhante no bash.
A intenção é fugir do script Perl e implementar a funcionalidade no bash.
Obrigado
Responder1
Comlibcurl com sftpapoiar:
curl sftp://sftp.example.com -o - | do_some_magic > filename
Eu testei o curl nestas distribuições Linux/Unix:
libcurl com suporte sftp integrado: RHEL6, RHEL7
Sem: RHEL5, Ubuntu 11.04, Ubuntu 14.04, Solaris 11
Responder2
Você não pode acessar um arquivo remoto sem baixá-lo, mas pode fazer download de um arquivo remoto sem salvá-lo no sistema de arquivos local. Não com o próprio bash, que não inclui suporte para SFTP, mas com utilitários de linha de comando.
O sftp
cliente do OpenSSH não parece ser capaz de fazer isso: ele insiste em obter um local de saída pesquisável, o que exclui canalizá-lo para uma substituição de comando.
Curl pode baixar um arquivo para saída padrão, mas nem sempre é construído com suporte a SFTP (começou como um downloader HTTP).
Como você já sabe como fazer isso em Perl, você pode simplesmente executar o Perl.
Alternativamente, monte o sistema de arquivos remoto sobreSSHFSe acesse-o com qualquer comando como cat
.
mkdir foo
sshfs example.com:/path/to/directory foo
content=$(cat foo/somefile)
fusermount -u foo
rmdir foo
Alternativamente, faça as coisas da maneira “normal” do shell. Os shells não são projetados para manipulações sofisticadas de dados na memória; eles são principalmente bons para executar outros comandos e trabalhar com arquivos. Trabalhar com conteúdo de arquivo normalmente envolve pipelines e, às vezes, arquivos temporários.
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")