这个单一的scp命令整天都有问题。 一直在寻找和问人等
$ scp -P portNumber /ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA/Game
我试图在目录中做一个文件,但获取文件不存在,如果我尝试在目录上执行scp命令,我得到“不是一个普通的文件”。
我曾尝试使用单双引号使用双反斜杠作为空格。 我真的是新来的这个,当被告知我会主要做PHP和Flash的时候,已经被抛到了期望知道这个东西的地方。
任何帮助或build议的欢迎。
谢谢
在命令行避开字符转义(如果这是问题的原因)最简单的方法之一是使用tab-completion来填充“笨拙的”字符; 取决于你的/ 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 ...
对于目录,你需要使用-r选项scp(它的缺失是为什么你得到了“不是普通文件”的错误)。
最后,服务器上的目的地是不是以键入的方式存在,这就是错误的源头(而不是源文件)?
标准shell转义就足够了,所以包括逗号:
scp -P portNumber / ReferenceFiles / CompanyA \,/ Some \ DirectoryWithA \ Space / Game用户@服务器:/ ReferenceFiles / CompanyA / Game
你必须同时使用\转义和引号:
scp -o port=portNumber "/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game" user@server:/ReferenceFiles/CompanyA/Game
不要问我为什么,但它的作品。
你的命令适合我 那真的是给了你麻烦的命令,而不是另一种方式呢? scp与本地文件名无关,但远程文件名在远程端进行shell扩展。 所以如果你在shell中inputscp命令,你需要引用两次远程文件名。 如果名称不包含任何单引号,简单的方法是用\保护特殊字符,然后将单引号放在参数中,如
scp -P portNumber user@server:'/ReferenceFiles/CompanyA,The/Some\ DirectoryWithA\ Space/Game' /ReferenceFiles/CompanyA/Game
顺便说一句,同样适用于rsync 。
假设“Game”是一个目录,要用scp复制一个给定目录中的所有文件,只需使用-r(recursion)选项和一个目录作为目标。 此外,目标是远程的Game的父亲的名称,因此您可以从远程参数中删除“Game”。 你也需要逃避那个逗号。
例如
$ scp -r -P portNumber /ReferenceFiles/CompanyA\,The/Some\ DirectoryWithA\ Space/Game user@server:/ReferenceFiles/CompanyA