我一直在玩 SCP,我已经能够将文件从一个地方传输到另一个地方。一切都很好,直到我需要将文件从 Ubuntu 复制到用户名中有空格的 Windows 用户 (* groan *)
虽然我让它像这样为 SSH 工作:
ssh "User Name Spaces"@192.168.0.42
Run Code Online (Sandbox Code Playgroud)
它不适用于 SCP:
scp "myfile.txt" "User Name Spaces"@192.168.0.42:folder
Run Code Online (Sandbox Code Playgroud)
当它返回时:
User Name Spaces: invalid user name
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法:
scp "myfile.txt" "User Name Spaces"@192.168.0.42:folder
scp "myfile.txt" "User\ Name\ Spaces"@192.168.0.42:folder
scp "myfile.txt" "User\\ Name\\ Spaces"@192.168.0.42:folder
scp "myfile.txt" "User\\\ Name\\\ Spaces"@192.168.0.42:folder
scp "myfile.txt" "'User Name Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User\ Name\ Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User\\ Name\\ Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User\\\ Name\\\ Spaces'"@192.168.0.42:folder
scp "myfile.txt" "'User Name Spaces'@192.168.0.42":folder
Run Code Online (Sandbox Code Playgroud)
等等......但似乎没有任何效果
有没有人有任何想法?
你可以使用~/.ssh/config. 它是 SSH 的每用户配置文件(以及基于 SSH 的命令,如scp和sftp)。创建它,如果它不存在,并添加:
Host 192.168.0.42
User "User Name Spaces"
Run Code Online (Sandbox Code Playgroud)
例如:
Host localhost
User "foo bar"
Run Code Online (Sandbox Code Playgroud)
然后:
$ scp test.txt localhost:
foo bar@localhost's password:
Run Code Online (Sandbox Code Playgroud)
(我实际上没有名为 的用户foo bar,所以我无法完成测试。)
您还可以在.ssh/config以下位置创建别名:
Host foo
Hostname 192.168.0.42
User "User Name Spaces"
Run Code Online (Sandbox Code Playgroud)
然后您可以方便地执行以下操作:
ssh foo
scp file foo:
Run Code Online (Sandbox Code Playgroud)
并避免必须键入整个 IP 地址。
另一种选择,如果你有tar两端可用:
tar c myfile.txt | ssh "User Name Spaces"@192.168.0.42 tar x
Run Code Online (Sandbox Code Playgroud)
tar创建一个 tar 存档,保存到标准输出并通过管道传输到 SSH,在那里它成为 的输入tar x,它提取存档。您可以使用诸如-C更改目录之类的选项(或在tar:之前作为 shell 命令执行此操作ssh … 'cd foo; tar x)。您还可以使用压缩并在网络带宽上节省一点:
tar zc myfile.txt | ssh "User Name Spaces"@192.168.0.42 tar zx
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14295 次 |
| 最近记录: |