是否可以使用 Unix 命令通过 SSH 将我的子目录中的文件 cp 到远程计算机?

Sha*_*ang 17 ssh remote

我将一系列软件文件下载到~/Downloads我个人计算机上的子目录中。我还使用 bash 远程连接到使用ssh.

是否可以将此文件传输ssh到远程计算机?

小智 42

您可能希望scp用于此目的。它是一种使用 SSH 协议传输文件的安全方式。

例如,要将名为yourfile.txtfrom的文件复制~/Downloads到远程计算机,请使用:

scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看更多示例。

  • @Paebbels 相反,用 `rsync` 替换上面的 `scp`,它应该可以正常工作。 (14认同)
  • 我认为 `rsync` 也可以工作,现在我想到了 (5认同)

Eri*_*ouf 37

虽然scp这显然是正确的工具,但如果由于某种原因您无法使用它,您可以从本地机器执行以下操作以将目录结构复制到远程机器:

tar -c . | ssh <remote> tar -x
Run Code Online (Sandbox Code Playgroud)

这将tar在本地机器上当前目录,并写入的内容tarstdout其然后通过管道输送到一个ssh命令在那里将执行远程命令解压它从读取文件stdin

已编辑以反映迪特里希·埃普 (Dietrich Epp) 关于-f -在创建和提取结束时均设为默认值的评论,因此无需明确指定。

  • 如果你这样做,你可能想在 `tar` 中添加一个 `-C basedir` 参数来解压到你的主目录以外的地方。 (7认同)

小智 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)在您的计算机上安装它。有关更多信息,您可以在线阅读教程

顺便说一下,这是我最喜欢的远程服务器上管理文件的方式。我通常以这种方式安装一台生产服务器和两台开发服务器,并使用我的正常文件浏览工作流程。


Cri*_*gie 9

第一次,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将告诉您它比再次执行普通副本快了多少倍。