SFTPに変数を渡すには?

SFTPに変数を渡すには?

デフォルトでは、タイムスタンプであるSFTP接続中にファイル名を文字列と一致させようとします。

ファイル名の一部を一致させるには? SFTP接続で変数を宣言できないようです。また、Bashで以前に作成された変数を呼び出すこともできません。

編集:私が試したこと

yr=$(date + "%Y")
sftp -i key.pem un@server
sftp> echo $yr
Invalid command.
sftp> $yr
Invalid command.

新しいケース

sftp -i key.pem un@server
sftp> test=$(date +"%Y")
Invalid command.

その2つを試しました。

答え1

プログラムはsftpそれ自体は完全に独立しておりbash、変数の値を知って拡張されます$yr。通常、アプリケーション固有の通信方法がなければ、bash変数を外部プログラムに渡すことはできません。

$yrファイル名に含まれるファイルのみをアップロードまたはダウンロードするには、scp次の方法を使用できます。

yr=$(date +%Y)
scp -i key.pem un@server:/some/long/path/that/includes/$yr .

ダウンロードのためまたは

scp -i key.pem some_local_file un@server:/some/long/$yr/path

アップロード用。

何らかの理由sftpで排他的に使用する必要がある場合は、すぐにバッチファイルを作成できます。

sftp -i key.pem -b - un@server <<< "get /some/path/with/$yr"

答え2

sftpシェルの一部ではなく独立したプログラムです。シェル構文がわかりません。変数拡張、条件文などの機能はありません。

SFTPを介して複雑なタスクを実行する最も簡単な方法は、次を使用することです。SSHFS。 SSHFS は、SFTP を使用してリモートファイルシステムをローカルファイルシステムとして表示するファイルシステムです。クライアント側では、SSHFSには次のものが必要です。ヒューズ、ほとんどの最新のuniceで利用可能です。サーバーでは、SSHFSにはSFTPが必要です。サーバーがSFTPを許可している場合は、SSHFSを使用できます。

mkdir server
sshfs -o IdentityFile=key.pem un@server: server
cp "server/dir/myfile-$(date +%Y).txt" /local/path
fusermount -u server

関連情報