從SFTP伺服器取得檔案並在記憶體中進行操作

從SFTP伺服器取得檔案並在記憶體中進行操作

有沒有巴什能夠存取 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")

相關內容