有没有巴什能够访问 SFTP 服务器的方式,“访问”文件并且无需下载文件即可读取它缓冲,操作内容然后将其存储在本地。
我知道这可以使用 perl 脚本来完成。
@file=$sftp->get($file);
我正在 bash 中寻找类似的方法。
目的是摆脱 Perl 脚本并在 bash 中实现功能。
谢谢
答案1
和libcurl 与 sftp支持:
curl sftp://sftp.example.com -o - | do_some_magic > filename
我已经在这些 Linux 发行版/Unix 上测试了curl:
具有内置 sftp 支持的 libcurl:RHEL6、RHEL7
不带:RHEL5、Ubuntu 11.04、Ubuntu 14.04、Solaris 11
答案2
您无法在不下载远程文件的情况下访问它,但您可以下载远程文件而不将其保存到本地文件系统。不是使用 bash 本身,它不包括对 SFTP 的支持,而是使用命令行实用程序。
OpenSSH 的客户sftp
端似乎无法做到这一点:它坚持获取可查找的输出位置,这排除了将其通过管道传输到命令替换中的情况。
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
或者,以“正常”shell 方式执行操作。 Shell 的设计目的不是在内存中进行奇特的数据操作,它们主要擅长执行其他命令和处理文件。处理文件内容通常涉及管道,有时还涉及临时文件。
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")