デフォルトでは、タイムスタンプである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