シェルスクリプトでSFTPを使用する

シェルスクリプトでSFTPを使用する

他の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を使用してください。一部のファイルだけをコピーしたい場合は、はるかに簡単です。scpコマンドラインからパターンを渡すことができます。ローカルシェルではなくリモート側で拡張されるように引用します。最後に.表示されたターゲットが現在のディレクトリであることを忘れないでください。

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

関連情報