如何使用带有特殊字符的scp复制文件?


9

我正在尝试复制一个带有冒号和句点的文件,例如:

scp "test.json-2014-08-07T11:17:58.662378" remote:tmp/

scp test.json-2014-08-07T11\:17\:58.662378 remote:tmp/

以及与文件的组合:

scp "file:///home/.../test.json-2014-08-07T11:17:58.662378" remote:tmp/

我的猜测是scp尝试将文件的一部分解释为服务器和/或端口号。如何避免这种情况?

如果我将文件重命名为test.json,则scp test.json remote:tmp/可以正常工作,但甚至无法scp test*62378 remote:tmp/正常工作。


让我仅注意,一些显而易见的“解决方案”是重命名文件,将其复制并在远程服务器上重命名。
FinnÅrupNielsen 2014年

为何*无法使用glob()的解释。它是在shell中完成的,因此会将完全相同的文本(参数)传递给scp。您需要更改传递到的文本(参数)scp。(有关将文本参数更改为以下内容的信息,请参见下面的答案。)
ctrl-alt-delor 2014年

应当注意,这:是OSX上的非法文件名字符,因此,如果您需要传输这些文件,则需要牢记。
丹妮丝2014年

在cygwin中,如果文件名以连字符开头,则可以在文件前加上双连字符,例如scp -- -1.JvSbrpchxuk.png user@example.com:/tmp
Shane Rowatt

Answers:


19

./在文件名之前使用:

scp ./test.json-2014-08-07T11:17:58.662378 remote:tmp/

使scp知道这是一个文件。没有它,scp由于冒号而认为它是主机名。


4

通过在路径前面加上./和转义您的路径来使用:。Cyber​​iti有更多信息。例:

scp ./file\:with\:colons.txt remoteserver:

2
您不需要逃脱冒号。
cuonglm

您的转义:是在shell级别上,而不是在scp级别上。
ctrl-alt-delor 2014年

是的,您需要逃脱。至少在我的外壳中,我需要逃脱。
FinnÅrupNielsen 2014年

@FinnÅrupNielsen:你的壳是什么?您不需要转义冒号,shell为您添加了反斜杠。您可以将其删除,然后仍然可以使用。
cuonglm

我错了。scp ./test.json-2014-08-07T11:17:58.662378 remote:tmp/确实有效!抱歉。
FinnÅrupNielsen 2014年

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.