Answers:
您可能要scp
为此目的使用。这是使用SSH协议传输文件的安全方法。
例如,要将名为yourfile.txt
从的文件复制~/Downloads
到远程计算机,请使用:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
您可以在此处看到更多示例。
rsync
可能工作为好,现在我想想
scp
上面替换为rsync
,它应该可以正常工作。
rsync
所有内容都使用,甚至是单个文件,因为在简单情况下它“可以正常工作”,而在其他情况下则效率更高。如果使用两种scp
或rsync
对任何尚未压缩和/或加密,记得要打开(压缩选项-C
进行scp
,-z
或--compress
进行rsync
)。实际上,我是按习惯打开它的-很少见到这种情况会减慢速度(例如,如果您使用的是CPI功率有限的慢速低功率设备,例如rPi)。
虽然scp
显然是正确的工具,但是如果由于某种原因而无法使用它,则可以从本地计算机执行以下操作,例如将目录结构复制到远程计算机:
tar -c . | ssh <remote> tar -x
这将tar
在本地机器上当前目录,并写入的内容tar
到stdout
其然后通过管道输送到一个ssh
命令在那里将执行远程命令解压它从读取文件stdin
编辑以反映Dietrich Epp关于-f -
在创建和提取端均是默认值的评论,因此无需明确指定。
-C basedir
参数以tar
提取主目录以外的其他位置。
如果您想在少数情况下执行此操作,sshfs
如果您使用的是支持FUSE的类Unix(Linux,* BSD,Mac OS X),则建议安装远程文件系统。在您的主目录下创建一个目录,例如〜/ remote-server:
$ mkdir ~/remote-server
然后使用挂载远程文件系统sshfs
。将“ yourserver.com”替换为远程计算机的主机名,并将“远程目录的名称”替换为您在远程系统上使用的目录。
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
完成此操作后,远程目录将成为文件系统的一部分,您可以在其上使用所有常规工具,包括cp
:
$ cp ~/Downloads/your-files ~/remote-server
如果尚未sshfs
安装,则应该可以使用软件包管理器将其安装在计算机上(查找名为sshfs
或的软件包fuse-sshfs
)。有关更多信息,您可以在线阅读教程。
顺便说一下,这是我最喜欢的在远程服务器上管理文件的方式。我通常以这种方式安装一台生产服务器和两台开发服务器,并使用它们的常规文件浏览工作流程。
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
,则-C
进行压缩。一旦运行良好,我就亲自为命令添加别名,以通过ssh快速挂载远程文件系统。@Benjamin_Staton我不会在这里使用sudo或root,至少也没有正确的用户/组映射。
第一次,scp
(复制过来ssh
)和之间没有真正的区别rsync
。
后续运行将受益于rsync不复制已经存在的文件。
rsync -avH ~/Downloads username@remotehost:Downloads
-a
对于所有文件-v
冗长-H
对于“只要找出符号链接并做正确的事”其他有用的标志包括:
--delete
删除源中不再存在的目标中的文件。--dry-run
用于测试-与结合使用时非常方便--delete
。ssh
如果已设置密钥,它也将使用密钥进行无密码登录。
运行结束时,rsync
将告诉您与再次进行普通复制相比,速度快了多少倍。
-H
实际上是针对硬链接的,当链接到源目录结构中的多个位置时,它会停止将相同内容发送两次或多次(但对于大型目录结构,该过程的效率会降低)。它对符号链接没有影响,但是-a
/ 包含的某些选项--archive
确实会影响符号链接的处理方式。
我在用ssh做非常相似的事情。我为Visual Studio创建了一个自定义生成工具,基本上是让VS运行ssh命令,该命令将我的代码复制到目标计算机,然后在该目标计算机上进行编译。
ssh userB @ hostB'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand'
注意使用单引号和分号。前者将您的命令通过ssh封装到hostB,后者允许您在hostA的一个ssh命令中运行多个hostB系统命令。
为了使此工作有效,您需要在启动计算机上设置ssh密钥,以便您可以是userA @ hostA并以userB身份登录到hostB。为userA @ hostA创建公共ssh密钥的过程已被详细记录。如果您没有在hostA上为userA创建公用密钥,而是将该密钥作为userB复制到hostB,那么每次都将被迫输入密码-这破坏了自动化的乐趣。
this file
)和多个文件(a series of software files
),最佳解决方案取决于您是单个文件还是多个文件。