带有空格和逗号的 SCP 命令

带有空格和逗号的 SCP 命令

一整天都在为这个 scp 命令而烦恼。一直在搜索和询问别人等等。

$ scp -P portNumber /ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA/Game

我尝试在目录中创建一个文件,但获取的文件不存在,并且如果我尝试在目录上执行 scp 命令,我得到的结果是“不是常规文件”。

我尝试过使用双反斜杠来表示空格,使用单引号和双引号。我对这个还很陌生,当我被告知我主要会使用 PHP 和 Flash 时,我以为我会了解这些内容...

欢迎任何帮助或建议。

谢谢

答案1

解决命令行中字符转义的最简单方法之一(如果这是问题的原因)是使用制表符补全来填充“尴尬”的字符;根据 /ReferenceFiles 目录的满度,您可以执行以下操作

  scp -P portNumber /Ref<tab>CompanyA<tab>Some<tab>Game/file user@server:...

或者,您可以使用 ? 代替字符,前提是不会出现太多冲突的文件/目录名称:

 scp -P portNumber /ReferenceFiles/CompanyA,The/Some?DirectoryWithA?Space/Game/file ...

对于目录,您需要使用 scp 的 -r 选项(省略该选项就是为什么您会收到“不是常规文件”错误的原因)。

最后,可能是因为服务器上的目标不存在所输入的内容,而这是错误的根源(而不是源文件)?

答案2

标准 shell 转义应该足够了,因此包括逗号:

scp -P 端口号 /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game 用户@服务器:/ReferenceFiles/CompanyA/Game

答案3

你必须同时使用 \ 转义引号 :

scp -o port=portNumber "/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game" user@server:/ReferenceFiles/CompanyA/Game

别问我为什么,但它确实有效。

答案4

假设“Game”是一个目录,要使用 scp 复制给定目录中的所有文件,只需使用 -r(递归)选项并以目录作为目标即可。此外,目标是远程 Game 的父级名称,因此您可以从远程参数中删除“Game”。您还需要转义该逗号。

例如

$ scp -r -P portNumber /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA

相关内容