如何使用 scp/rsync 复制带有冒号 (:) 的文件
scp file : name.txt user@server1:/path
我收到以下错误:
ssh: 无法解析主机名:名称或服务未知
如何使用 scp 或 rsync 复制名称中包含冒号的文件?
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 终端/ssh |
操作系统兼容性 | BSD • Linux • macOS • Unix • WSL |
预计阅读时间 | 2 分钟 |
$ scp ./file:name.txt user@server1:/path/to/dest
# another option to state full path #
$ scp /path/to/src/file:name.txt user@server1:/path/to/dest
$ rsync /path/to/src/file:name.txt user@server1:/path/to/dest
如何使用 scp/rsync 复制带有冒号 (:) 的文件
在此示例中,我将名为 mysql-blog-db.23-02-2014-11:10:06.gz 的文件复制到名为 backup-test-server13 的服务器
rsync 'mysql-blog-db.23-02-2014-11:10:06.gz' vivek@backu-test-server13:~
示例错误/输出:
The source and destination cannot both be remote. rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-42/rsync/main.c(1083) [receiver=2.6.9]
您将使用 scp 命令获得相同的结果:
scp 'mysql-blog-db.23-02-2014-11:10:06.gz' vivek@backu-test-server13:~
再次:
ssh: Could not resolve hostname mysql-blog-db.23-02-2014-11:10:06.gz: nodename nor servname provided, or not known
那么,如何 scp/rsync 带有冒号的文件名?
在此示例中,我使用 scp 命令将名为 mysql-blog-db.23-02-2014-11:10:06.gz 的文件复制到名为 backup-test-server13 的服务器:
scp ./mysql-blog-db.23-02-2014-11\:10\:06.gz vivek@backu-test-server13:~
或者使用完整路径:
scp /tmp/mysql-blog-db.23-02-2014-11\:10\:06.gz vivek@backu-test-server13:~
我们还可以向 scp 命令或 rsync 命令传递一些附加选项。例如:
scp -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/vivek/.ssh/my-keys -P 22 ./mysql-blog-db.23-02-2014-11\:10\:06.gz vivek@backu-test-server13:~
示例输出:
Warning: Permanently added '173.xx.yy.zz' (RSA) to the list of known hosts. mysql-blog-db.23-02-2014-11:10:06.gz
以下是 rsync 命令的语法:
rsync -av ./foo:bar:file.txt user@server1.example.com:/tmp rsync -av $HOME/data/foo:bar:file.txt user@server1.example.com:/tmp
总结
当 scp、rsync 和其他实用程序看到:冒号字符时,它们会将本地文件名视为远程主机。例如,filename:foo.txt被视为远程主机,因为它:的名称中包含 (冒号)。那么如何解决这个问题呢?您可以使用绝对相对路径名来声明本地文件名,以避免 scp、rsync 和其他实用程序将包含冒号 ( :) 的文件名视为远程主机名。例如:
因此:
有关更多信息,请使用 man 命令查看以下手册页:
./filename:foo.txt <-- relative path
/path/to/dir/filename:foo.txt <-- absolute path
# Relative path scp example
$ scp ./filename:foo.txt user@hostname:/path/to/dest
# Absolute path scp example #
$ scp /path/to/dir/filename:foo.txt user@hostname:/path/to/dest
$ man scp