linux - BASH - 传递给 sFTP 的带空格的文件名无法正确解析

标签 linux bash sftp

我正在尝试将带空格的文件名传递给将从 sFTP 服务器下载传递的文件名的脚本。我在识别脚本时遇到问题,解析后是一个文件名而不是两个单词。

export tloc=/path/to/target
export usr=username
export svr=host.name.com
export pwd=pass1234
export sloc=/path/to/source
export file="test file_12345.zip"

#-- Perform download of file specified using passed paramters.
sshpass -p $pwd sftp -o StrictHostKeyChecking=no $usr@$svr:$sloc/"$file" $tloc

据我所知,当脚本执行时,它会将引号中包含的单词解析为一个单词,然后删除引号。我在这里错过了什么?在其他语言中,我已经能够嵌套引号或使用一些其他语法来使最终结果如下所示。

sshpass -p pass1234 sftp -o StrictHostKeyChecking=no usernamehost.name.com:/path/to/source/"test file_12345.zip" /path/to/target

如有任何帮助,我们将不胜感激。

最佳答案

那是由于 sftp 的错误功能(错误?)。您在命令行上传递的文件名按原样有效地提供给 sftp 的交互式“get”命令,但 get 命令在空格处拆分并使用空格后的部分作为目标,忽略 $tloc 命令行参数。 你需要一个额外的引用级别来让它做你想做的事:

sshpass -p $pwd sftp -o StrictHostKeyChecking=no $usr@$svr:$sloc/"\"$file\"" $tloc

关于linux - BASH - 传递给 sFTP 的带空格的文件名无法正确解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465509/

相关文章:

ruby - 使用 Ruby SFTP 删除文件 `remove` 和 `remove!`

java - 在 Linux 机器上运行 testng.xml

PHP:如何启动一个分离进程?

c - 输入从不存在的文件重定向到 fopen()

python - 用于在文件夹中查找文件的 Bash 脚本

linux - 如何避免在 perl 脚本中硬编码用户名/密码

linux - 将多个作业数组的输出保存在一个文件中

c - Linux 上基于 C 的事件循环进程中的异步计时器

image - 如何获取网站中所有图片的所有信息

linux - 等效于 ftp 命令提示符和 sftp 中的散列