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