我编写了一个 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* .