我试图在 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