我怎样才能使用scp与文件名冒号文件?(How can I scp a file with a co

2019-07-19 08:42发布

我试图用一个文件复制scpbash用冒号( : )在源文件名字符。 我命令我使用的模糊版本是:

scp file\:\ name.mp4 user@host:"/path/to/dest"

我得到这个错误:

ssh: Could not resolve hostname Portal 2: Name or service not known

我知道我可以只重命名该文件并删除: ,但我想知道是否有可能逃脱结肠。

Answer 1:

并不完全是bash逃避问题,这是scp治疗x:作为[用户@]主机前缀,请尝试:

scp ./file:\ name.mp4 user@host:"/path/to/dest"

使用相对(例如./ )或完全合格的路径( /path/to/source )防止了这种行为-的存在/一个前:导致的OpenSSH停止检查一个可能的host:user@host:前缀)。

的OpenSSH的scp只有特殊情况下以冒号允许那些没有问题的工作开始的文件名,它为逃避一个不支持:通常意义上的,并具有有效的主机名与几乎任何文件名没有其他的想法:可能导致此(或者,如果等效的IPv6行为[ ]被发现之前: )。

这也可能会影响其他程序,如rsync ,相同的解决方法适用于那里。

(由于OpenSSH的公司的简单解析[]括IPv6地址,就可以顺利scp包含文件:与启动[ ,或含有@[:不包含]: ,但这不是普遍有用的;-)


(当下面的文字写 原来的问题是如何逃脱在bash冒号?它适用于这种情况,而不是scp ,因为没有量外壳逃逸,将有助于在那里。)

为了回答关于如何逃脱的问题:你并不需要,但“ \: ”作品。 邻居一个:用于:

  1. 空命令: ,没必要逃避,虽然可以,就像\e\c\h\o foo它的命令没有影响(“没有效果”并不完全正确,如果你逃避的一个或多个字符,它将防止别名被匹配,你可以别名:
  2. PATH (和其他人, CDPATHMAILPATH )转义值没有任何有用的效果(我一直无法从目录中我路上运行的程序包含: ,这是一个小意外)
  3. 参数扩展${name:-x}多, name必须是[a-zA-Z_][a-zA-Z0-9_]所以没必要逃跑变量名称,因为没有歧义,没有必要逃跑随后:在参数扩展的其它变型
  4. ? : ? :三元只在变量和数字操作,无需逃生
  5. ===~在喜欢的模式类[[:digit:]] ,你可以逃脱\:但我在一个头绪,可能永远是有用的?
  6. 命令或函数名之内,没有必要逃避, \:有没有有用的效果

(需要注意的是空的命令就是:你可以有一个命令或功能命名,如“ :foo ”,它可以在没有逃脱被调用,在这方面它是不同的,以# ,其中指定命令#foo需要进行转义。 )



Answer 2:

我尝试使用完全合格的路径,@ mr.spuratic的答案,但没有工作,在我的情况,我必须使用绝对路径,这是我的解决方案:

scp `hostname`:/root/this/is/test/file.txt user@host:"/path/to/dest"


文章来源: How can I scp a file with a colon in the file name?