如何将变量传递到 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是一个独立的程序,不是 shell 的一部分。它不理解 shell 语法。它没有变量扩展和条件语句等功能。

通过 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

相关内容