这是一个边缘用例,但我找不到解决方案。
我想将当前目录复制.
到新目录(而不必知道或关心其名称)。使用scp
。
Bash 似乎没有问题。例如cp -r . ../new-name
将生成一个新的目录副本,没有任何问题。但是scp -r . host:new-name
我得到scp: error: unexpected filename: .
我使用的解决方法是使用rsync
而不是scp
,或者使用scp -r ../current-name
而不是scp -r .
。但如果能理解为什么显而易见的方法不适用于 scp 以及是否有更简单的“修复”方法,那就太好了。
另请注意,我不想将当前目录的内容复制到另一个已经存在的目录中,如scp -r ./* host:existing-dir/
。目标是将当前目录本身复制到新位置(即创建一个新目录)-
答案1
根据先前的答案,罪魁祸首是CVE-2017-20685.
;显然,恶意远程主机可以利用不正确的名称验证,因此禁用了 scp 路径中的支持。解决方法是将其替换.
为$(pwd)
。
答案2
您可以.
使用类似${PWD}
或pwd
readlink -f .
scp -r "${PWD}" ${remote}:${dst_path}
答案3
scp ./* [email protected]:/targetdir
我尝试./*
重新镀层-r ./
,它起作用了