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