从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一。

我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一。有很多办法都能处理这个任务,我们试着加以概括。你可以挑一个喜欢的方法。当然,看看其他命令也能在别的地方帮到你。

我已经在自己的环境下测试过所有的命令和脚本了,因此你可以直接用到日常工作当中。

通常大家都倾向 scp,因为它是文件复制的原生命令native command之一。但本文所列出的其它命令也很好用,建议你尝试一下。

文件复制可以轻易地用以下四种方法。

  • scp:在网络上的两个主机之间复制文件,它使用 ssh 做文件传输,并使用相同的认证方式,具有相同的安全性。
  • rsync:是一个既快速又出众的多功能文件复制工具。它能本地复制、通过远程 shell 在其它主机之间复制,或者与远程的 rsync 守护进程daemon 之间复制。
  • pscp:是一个并行复制文件到多个主机上的程序。它提供了诸多特性,例如为 scp 配置免密传输,保存输出到文件,以及超时控制。
  • prsync:也是一个并行复制文件到多个主机上的程序。它也提供了诸多特性,例如为 ssh 配置免密传输,保存输出到 文件,以及超时控制。

方式 1:如何在 Linux 上使用 scp 命令从本地系统向远程系统复制文件/文件夹?

scp 命令可以让我们从本地系统复制文件/文件夹到远程系统上。

我会把 output.txt 文件从本地系统复制到 2g.CentOS.com 远程系统的 /opt/backup 文件夹下。

  1. # scp output.txt root@2g.CentOS.com:/opt/backup
  2. output.txt 100% 2468 2.4KB/s 00:00

从本地系统复制两个文件 output.txt 和 passwd-up.sh 到远程系统 2g.CentOs.com 的 /opt/backup 文件夹下。

  1. # scp output.txt passwd-up.sh root@2g.CentOS.com:/opt/backup
  2. output.txt 100% 2468 2.4KB/s 00:00
  3. passwd-up.sh 100% 877 0.9KB/s 00:00

从本地系统复制 shell-script 文件夹到远程系统 2g.CentOs.com 的 /opt/back 文件夹下。

这会连同shell-script 文件夹下所有的文件一同复制到/opt/back 下。

  1. # scp -r /home/daygeek/2g/shell-script/ root@:/opt/backup/
  2. output.txt 100% 2468 2.4KB/s 00:00
  3. ovh.sh 100% 76 0.1KB/s 00:00
  4. passwd-up.sh 100% 877 0.9KB/s 00:00
  5. passwd-up1.sh 100% 7 0.0KB/s 00:00
  6. server-list.txt 100% 23 0.0KB/s 00:00

方式 2:如何在 Linux 上使用 scp 命令和 Shell 脚本复制文件/文件夹到多个远程系统上?

如果你想复制同一个文件到多个远程服务器上,那就需要创建一个如下面那样的小 shell 脚本。

并且,需要将服务器添加进 server-list.txt 文件。确保添加成功后,每个服务器应当单独一行。

最终,你想要的脚本就像下面这样:

  1. # file-copy.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. scp /home/daygeek/2g/shell-script/output.txt root@$server:/opt/backup
  6. done

完成之后,给 file-copy.sh 文件设置可执行权限。

  1. # chmod +x file-copy.sh

最后运行脚本完成复制。

  1. # ./file-copy.sh
  2. output.txt 100% 2468 2.4KB/s 00:00
  3. output.txt 100% 2468 2.4KB/s 00:00

使用下面的脚本可以复制多个文件到多个远程服务器上。

  1. # file-copy.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. scp /home/daygeek/2g/shell-script/output.txt passwd-up.sh root@$server:/opt/backup
  6. done

下面结果显示所有的两个文件都复制到两个服务器上。

  1. # ./file-cp.sh
  2. output.txt 100% 2468 2.4KB/s 00:00
  3. passwd-up.sh 100% 877 0.9KB/s 00:00
  4. output.txt 100% 2468 2.4KB/s 00:00
  5. passwd-up.sh 100% 877 0.9KB/s 00:00

使用下面的脚本递归地复制文件夹到多个远程服务器上。

  1. # file-copy.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. scp -r /home/daygeek/2g/shell-script/ root@$server:/opt/backup
  6. done

上述脚本的输出。

  1. # ./file-cp.sh
  2. output.txt 100% 2468 2.4KB/s 00:00
  3. ovh.sh 100% 76 0.1KB/s 00:00
  4. passwd-up.sh 100% 877 0.9KB/s 00:00
  5. passwd-up1.sh 100% 7 0.0KB/s 00:00
  6. server-list.txt 100% 23 0.0KB/s 00:00
  7. output.txt 100% 2468 2.4KB/s 00:00
  8. ovh.sh 100% 76 0.1KB/s 00:00
  9. passwd-up.sh 100% 877 0.9KB/s 00:00
  10. passwd-up1.sh 100% 7 0.0KB/s 00:00
  11. server-list.txt 100% 23 0.0KB/s 00:00

方式 3:如何在 Linux 上使用 pscp 命令复制文件/文件夹到多个远程系统上?

pscp 命令可以直接让我们复制文件到多个远程服务器上。

使用下面的 pscp 命令复制单个文件到远程服务器。

  1. # pscp.pssh -H 2g.CentOS.com /home/daygeek/2g/shell-script/output.txt /opt/backup
  2. [1] 18:46:11 [SUCCESS] 2g.CentOS.com

使用下面的 pscp 命令复制多个文件到远程服务器。

  1. # pscp.pssh -H 2g.CentOS.com /home/daygeek/2g/shell-script/output.txt ovh.sh /opt/backup
  2. [1] 18:47:48 [SUCCESS] 2g.CentOS.com

使用下面的 pscp 命令递归地复制整个文件夹到远程服务器。

  1. # pscp.pssh -H 2g.CentOS.com -r /home/daygeek/2g/shell-script/ /opt/backup
  2. [1] 18:48:46 [SUCCESS] 2g.CentOS.com

使用下面的 pscp 命令使用下面的命令复制单个文件到多个远程服务器。

  1. # pscp.pssh -h server-list.txt /home/daygeek/2g/shell-script/output.txt /opt/backup
  2. [1] 18:49:48 [SUCCESS] 2g.CentOS.com
  3. [2] 18:49:48 [SUCCESS] 2g.Debian.com

使用下面的 pscp 命令复制多个文件到多个远程服务器。

  1. # pscp.pssh -h server-list.txt /home/daygeek/2g/shell-script/output.txt passwd-up.sh /opt/backup
  2. [1] 18:50:30 [SUCCESS] 2g.Debian.com
  3. [2] 18:50:30 [SUCCESS] 2g.CentOS.com

使用下面的命令递归地复制文件夹到多个远程服务器。

  1. # pscp.pssh -h server-list.txt -r /home/daygeek/2g/shell-script/ /opt/backup
  2. [1] 18:51:31 [SUCCESS] 2g.Debian.com
  3. [2] 18:51:31 [SUCCESS] 2g.CentOS.com

方式 4:如何在 Linux 上使用 rsync 命令复制文件/文件夹到多个远程系统上?

rsync 是一个即快速又出众的多功能文件复制工具。它能本地复制、通过远程 shell 在其它主机之间复制,或者在远程 rsync 守护进程daemon 之间复制。

使用下面的 rsync 命令复制单个文件到远程服务器。

  1. # rsync -avz /home/daygeek/2g/shell-script/output.txt root@2g.CentOS.com:/opt/backup
  2. sending incremental file list
  3. output.txt
  4. sent 598 bytes received 31 bytes 1258.00 bytes/sec
  5. total size is 2468 speedup is 3.92

使用下面的 rsync 命令复制多个文件到远程服务器。

  1. # rsync -avz /home/daygeek/2g/shell-script/output.txt passwd-up.sh root@2g.CentOS.com:/opt/backup
  2. sending incremental file list
  3. output.txt
  4. passwd-up.sh
  5. sent 737 bytes received 50 bytes 1574.00 bytes/sec
  6. total size is 2537 speedup is 3.22

使用下面的 rsync 命令通过 ssh 复制单个文件到远程服务器。

  1. # rsync -avzhe ssh /home/daygeek/2g/shell-script/output.txt root@2g.CentOS.com:/opt/backup
  2. sending incremental file list
  3. output.txt
  4. sent 598 bytes received 31 bytes 419.33 bytes/sec
  5. total size is 2.47K speedup is 3.92

使用下面的 rsync 命令通过 ssh 递归地复制文件夹到远程服务器。这种方式只复制文件不包括文件夹。

  1. # rsync -avzhe ssh /home/daygeek/2g/shell-script/ root@2g.CentOS.com:/opt/backup
  2. sending incremental file list
  3. ./
  4. output.txt
  5. ovh.sh
  6. passwd-up.sh
  7. passwd-up1.sh
  8. server-list.txt
  9. sent 3.85K bytes received 281 bytes 8.26K bytes/sec
  10. total size is 9.12K speedup is 2.21

方式 5:如何在 Linux 上使用 rsync 命令和 Shell 脚本复制文件/文件夹到多个远程系统上?

如果你想复制同一个文件到多个远程服务器上,那也需要创建一个如下面那样的小 shell 脚本。

  1. # file-copy.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. rsync -avzhe ssh /home/daygeek/2g/shell-script/ root@2g.CentOS.com$server:/opt/backup
  6. done

上面脚本的输出。

  1. # ./file-copy.sh
  2. sending incremental file list
  3. ./
  4. output.txt
  5. ovh.sh
  6. passwd-up.sh
  7. passwd-up1.sh
  8. server-list.txt
  9. sent 3.86K bytes received 281 bytes 8.28K bytes/sec
  10. total size is 9.13K speedup is 2.21
  11. sending incremental file list
  12. ./
  13. output.txt
  14. ovh.sh
  15. passwd-up.sh
  16. passwd-up1.sh
  17. server-list.txt
  18. sent 3.86K bytes received 281 bytes 2.76K bytes/sec
  19. total size is 9.13K speedup is 2.21

方式 6:如何在 Linux 上使用 scp 命令和 Shell 脚本从本地系统向多个远程系统复制文件/文件夹?

在上面两个 shell 脚本中,我们需要事先指定好文件和文件夹的路径,这儿我做了些小修改,让脚本可以接收文件或文件夹作为输入参数。当你每天需要多次执行复制时,这将会非常有用。

  1. # file-copy.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. scp -r $1 root@2g.CentOS.com$server:/opt/backup
  6. done

输入文件名并运行脚本。

  1. # ./file-copy.sh output1.txt
  2. output1.txt 100% 3558 3.5KB/s 00:00
  3. output1.txt 100% 3558 3.5KB/s 00:00

方式 7:如何在 Linux 系统上用非标准端口复制文件/文件夹到远程系统?

如果你想使用非标准端口,使用下面的 shell 脚本复制文件或文件夹。

如果你使用了非标准Non-Standard端口,确保像下面 scp 命令那样指定好了端口号。

  1. # file-copy-scp.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. scp -P 2222 -r $1 root@2g.CentOS.com$server:/opt/backup
  6. done

运行脚本,输入文件名。

  1. # ./file-copy.sh ovh.sh
  2. ovh.sh 100% 3558 3.5KB/s 00:00
  3. ovh.sh 100% 3558 3.5KB/s 00:00

如果你使用了非标准Non-Standard端口,确保像下面 rsync 命令那样指定好了端口号。

  1. # file-copy-rsync.sh
  2. #!/bin/sh
  3. for server in `more server-list.txt`
  4. do
  5. rsync -avzhe 'ssh -p 2222' $1 root@2g.CentOS.com$server:/opt/backup
  6. done

运行脚本,输入文件名。

  1. # ./file-copy-rsync.sh passwd-up.sh
  2. sending incremental file list
  3. passwd-up.sh
  4. sent 238 bytes received 35 bytes 26.00 bytes/sec
  5. total size is 159 speedup is 0.58
  6. sending incremental file list
  7. passwd-up.sh
  8. sent 238 bytes received 35 bytes 26.00 bytes/sec
  9. total size is 159 speedup is 0.58

如何在 Linux 上复制文件/文件夹到远程系统?的更多相关文章

  1. 如何在Linux上编译c++文件

    1. 打开Linux客户端,新建一个c++文件 2. 写如下代码,退出保存 3.对.cpp文件进行编译并输出结果.

  2. SecureCRT、Xmanager对Linux上传下载文件或文件夹

    (1).SecureCRT SecureCRT对Linux上传下载文件或文件夹拥有一个专门的软件SecureFXPortable.对于它来说只有两个的难题,一个是版本问题,尽量去官网下载最近版本:另一 ...

  3. Linux 下复制整个文件夹的命令

    在 Linux 下复制整个文件夹,包括它的子文件夹及其隐藏文件的方法是: cp -r /etc/skel /home/user 或者 mkdir /home/<new_user> cp - ...

  4. linux上查看swf文件.靠谱

    在linux上查看swf文件,本来想用gnash 来看,可是有的电脑上看的时候只有声音,没有图像 所以用网页来查看,推荐谷歌 我们在和flash文件的同目录下新建一个文件名为:index.html 注 ...

  5. Linux上删除大量文件几种方式对比

    目录 Linux上删除大量文件几种方式对比 1. rm删除:因为文件数量太多,rm无法删除(报错) 2. find查找删除:-exec 3. find查找删除:xargs 4. find调用-dele ...

  6. #内存不够,swap来凑# Linux上创建SWAP文件/分区

    转自:https://www.vmvps.com/how-to-create-a-swap-file-on-the-linux-os.html 很久很久以前,电脑的内存是个珍贵东西,于是乎就有了swa ...

  7. springboot打成的jar包如何在Linux上持久运行

    一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...

  8. 如何在 Linux 上安装应用程序

    如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...

  9. 关于如何在Linux上使用Nugix反向代理部署net core3.1项目

    本文意在教大家如何在Linux上部署net core web项目,本人通过实践已经成功可以通过外网访问我部署在阿里云服务器上的站点. 一:需要用到的东西如下: 1:一个基于net core框架下的we ...

随机推荐

  1. [winograd]winograd算法在卷积中的应用

    卷积优化方法之Winograd 在卷积神经网络当中, 卷积运算是尤其是计算敏感的, 尤其是在端上设备中, 对于性能的要求更为苛刻.对于卷积优化的方法也有很多种,本文便针对近年来最常见的优化方法Wino ...

  2. Java操作ini文件 ,解决properties文件中无法读取换行及空格

    1.依赖jar包 ini4j-0.5.4.jar 2.官网 http://ini4j.sourceforge.net/ 3.测试例子 [java] view plain copy package cn ...

  3. ASP.NET Core 的 `Core` 有几种写法?

    一.概述 本文将会根据情况持续更新. 作为一个 Framework,ASP.NET Core 提供了诸多的扩展点.使用内置的组件和默认的配置通常就能够满足部分需求,当需要扩展的时就需要先去找出这些扩展 ...

  4. keepalived安装与配置,组建高可用服务器

    一.准备环境 linux系统:CentOS7 keepalived版本:keepalived-1.3.5.tar.gz keepalived下载地址:http://www.keepalived.org ...

  5. 咸鱼入门到放弃13--监听器(Listener)

    一.监听器介绍 1.1.监听器的概念

  6. mybatis中有趣的符号#与$

    ${ }是字符串替换,相当于直接显示数据,#{ }是预编译处理,相当于对数据加上双引号 即#是将传入的值当做字符串的形式,先替换为?号,然后调用PreparedStatement的set方法来赋值,而 ...

  7. ECMAScript 6 之 let 和 const 命令

    1.let基本用法 1.1.声明变量 let声明的变量只在它所在的代码块有效. 1.2.不存在变量提升 var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined: let命令 ...

  8. 微信小程序支付遇到的坑

    1,微信公众号支付和微信小程序支付有差异 微信公众号:可以直接跳转走h5的微信支付 微信小程序:在测试环境.沙箱环境使用微信公众号的跳转支付没有问题,在线上存在支付异常 最后商讨的解决方法 openi ...

  9. js初学练手:Csdn Ads Cleaner

    最新版本在这里哒:https://greasyfork.org/zh-CN/scripts/376621-csdn-ads-cleaner 隔壁csdn的广告太猖獗啦!写个js管管它 需配合Tempe ...

  10. 在github上面创建新的分支

    第一步:git branch 查看当前分支情况 git branch //查看当前分支情况 第二步:git branch 分支名,新建一个自己的分支 git branch 分支名 // 新建一个自己的 ...