脚本出现问题,文件名中带有空格


11

我有一个脚本,该脚本将来自远程主机的文件压缩回本地。有时文件名包含空格。scp不喜欢其文件名中的空格。由于某种原因,我尝试处理空间的结果未产生正确的scp路径。

码:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop

结果是

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

将PATH括在引号中"$PATH"会产生相同的错误。

将空间交换为逃逸空间也不起作用,尽管据我所知应该这样:

ESC_PATH=${PATH/' '/'\ '}

尽管打印转义的路径表明编辑有效:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
请不要$PATH用于您自己的变量,因为您的终端需要它。
Bernhard 2014年

Answers:


19

您应该同时引用声明和用法

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

如果不引用$path第一部分,则仅包含第一部分。如果不引用第二个,scp则将每个以空格分隔的部分作为参数。

(我已更改$PATH为,$path因为它$PATH是一个重要的保留变量,您不得将其用于一般用途。)


1
完善!感谢一百万@Matteo。事实证明,还有一个前缀空间也向其中扔了一把扳手。
Miles Alden

1

我正在尝试与ssh非常相似的东西,并通过它传递命令行。例如

ssh <somehost> ls -l "$PATH"

我发现仅定义“ $ PATH”并不能解决问题-它仍然引发错误。但是如果我跑了

ssh <somehost> ls -l "\"$PATH"\"

这工作了。技巧是确保从外壳程序将另外一组“”传递给ssh命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.