Ssh
在 shell 腳本中使用 SFTP
我編寫了一個 shell 腳本來從另一台 UNIX 伺服器獲取文件。但是文件沒有被複製。有人可以幫我做錯什麼。
sftp username@server:$path get ubpbilp* ./ mget cust.cmp* bunc.cmp* ./ echo "Your files are copied."
或許是這樣的:
sftp username@server <<EOT cd $path get ubpbilp* get cust.cmp* get bunc.cmp* quit EOT
因為 sftp 不支持
mget
。
正如其他人所說,您需要將
get
命令作為輸入傳遞給sftp
. 您可以使用此處的文件來完成。另外,請注意sftp
沒有mget
命令。sftp "username@server:$path" <<'EOF' get ubpbilp* ./ get cust.cmp* ./ get bunc.cmp* ./ EOF
SFTP 編寫腳本不太方便。如果伺服器允許 scp,請使用它。如果你只是想複製一些文件,那就更容易了。
scp
您可以在;的命令行上傳遞模式 確保引用它們,以便它們在遠端端而不是由本地 shell 擴展。不要忘記最後.
指示目標是目前目錄。scp -p \ "username@server:$path/ubpbilp*" \ "username@server:$path/cust.cmp*" \ "username@server:$path/bunc.cmp*" \ .
如果您需要做的不僅僅是複製文件,請安裝SSHFS(如果可能)。SSHFS 通過正常的文件系統機制提供對遠端文件的訪問。它在後台使用 SFTP,因此如果伺服器允許 SFTP,您可以使用 SSHFS,前提是您的電腦允許客戶端允許FUSE。
mkdir server-dir trap 'fusermount -u server-dir; rmdir server-dir' 0 HUP INT TERM sshfs "username@server:$path" server-dir cp -p server-dir/ubpbilp* cust.cmp* bunc.cmp* .