在 shell 脚本中使用 SFTP

在 shell 脚本中使用 SFTP

我编写了一个 shell 脚本来从另一个 UNIX 服务器获取文件。但文件没有被复制。有人可以帮助我我做错了什么吗?

sftp username@server:$path
get ubpbilp* ./
mget cust.cmp* bunc.cmp* ./
echo "Your files are copied."

答案1

也许像这样:

sftp username@server <<EOT
cd $path
get ubpbilp*
get cust.cmp* 
get bunc.cmp*
quit
EOT

因为 sftp 不支持mget.

答案2

正如其他人所说,您需要将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,前提是您的计算机允许客户端允许保险丝

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* .

相关内容