我将一系列软件文件下载到~/Downloads
我个人计算机上的子目录中。我还使用 bash 远程连接到使用ssh
.
是否可以将此文件传输ssh
到远程计算机?
小智 42
您可能希望scp
用于此目的。它是一种使用 SSH 协议传输文件的安全方式。
例如,要将名为yourfile.txt
from的文件复制~/Downloads
到远程计算机,请使用:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看更多示例。
Eri*_*ouf 37
虽然scp
这显然是正确的工具,但如果由于某种原因您无法使用它,您可以从本地机器执行以下操作以将目录结构复制到远程机器:
tar -c . | ssh <remote> tar -x
Run Code Online (Sandbox Code Playgroud)
这将tar
在本地机器上当前目录,并写入的内容tar
到stdout
其然后通过管道输送到一个ssh
命令在那里将执行远程命令解压它从读取文件stdin
已编辑以反映迪特里希·埃普 (Dietrich Epp) 关于-f -
在创建和提取结束时均设为默认值的评论,因此无需明确指定。
小智 17
如果您想在极少数情况下执行此操作,sshfs
如果您使用的是支持 FUSE(Linux、*BSD、Mac OS X)的类 Unix ,我建议您挂载远程文件系统。在您的主目录下创建一个名为 ~/remote-server 的目录:
$ mkdir ~/remote-server
Run Code Online (Sandbox Code Playgroud)
然后挂载远程文件系统sshfs
。将“yourserver.com”替换为远程计算机的主机名,将“远程目录名称”替换为您在远程系统上使用的目录。
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
Run Code Online (Sandbox Code Playgroud)
完成后,远程目录就是文件系统的一部分,您可以在其上使用所有常规工具,包括cp
:
$ cp ~/Downloads/your-files ~/remote-server
Run Code Online (Sandbox Code Playgroud)
如果您还没有sshfs
安装,您应该能够使用您的包管理器(查找名为sshfs
或 的包fuse-sshfs
)在您的计算机上安装它。有关更多信息,您可以在线阅读教程。
顺便说一下,这是我最喜欢的远程服务器上管理文件的方式。我通常以这种方式安装一台生产服务器和两台开发服务器,并使用我的正常文件浏览工作流程。
第一次,scp
(copy over ssh
) 和rsync
.
后续运行将受益于 rsync 不复制已存在的文件。
rsync -avH ~/Downloads username@remotehost:Downloads
Run Code Online (Sandbox Code Playgroud)
-a
对于所有文件-v
为冗长-H
因为“只需找出符号链接并做正确的事情”其他有用的标志包括:
--delete
删除源中不再存在的目标中的文件。--dry-run
用于测试 - 与--delete
.这将使用 ssh
如果您设置了密钥,密钥进行无密码登录。
在运行结束时,rsync
将告诉您它比再次执行普通副本快了多少倍。