Linux中实现文件复制与迁移的命令详解

 更新时间:2025年12月08日 08:47:48   作者:檀越@新空间  
这篇文章主要为大家详细介绍了Linux中实现文件复制与迁移的命令以及相关用法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下

一、scp 命令

复制文件:

scp -r /Users/test/Downloads/home/* root@39.11.11.15:/usr/share/nginx/html

二、rsync 命令

先创建文件夹

rsync -avz -e ssh /Users/test/Downloads/home/* root@39.11.11.15:/usr/share/nginx/html/

在使用 scp 命令进行远程复制时,如果目标目录不存在,scp 命令本身不会自动创建目标目录。你需要在执行 scp 命令之前,先通过 SSH 连接到远程服务器并创建目标目录。

以下是修改后的步骤:

  • 创建目标目录:首先通过 SSH 连接到远程服务器,然后创建目标目录。
  • 使用 scp 命令复制文件:在目标目录创建完成后,使用 scp 命令复制文件。

以下是具体的命令:

# 1. SSH 连接到远程服务器
ssh root@39.11.11.15

# 2. 在远程服务器上创建目标目录(如果不存在)
mkdir -p /usr/share/nginx/html/home

# 3. 退出 SSH 连接
exit

# 4. 使用 scp 命令复制文件
scp -r /Users/test/Downloads/home/* root@39.11.11.15:/usr/share/nginx/html/home

解释:

  • ssh root@39.11.11.15:通过 SSH 连接到远程服务器。
  • mkdir -p /usr/share/nginx/html/home:创建目标目录,-p 参数确保目录的父目录也会被创建。
  • exit:退出 SSH 连接。
  • scp -r /Users/test/Downloads/home/* root@39.11.11.15:/usr/share/nginx/html/home:使用 scp 命令复制文件到目标目录。

如果你希望在一个命令中完成这些操作,可以使用 rsync 命令,它在复制文件之前会自动创建目标目录:

rsync -avz -e ssh /Users/test/Downloads/home/ root@39.11.11.15:/usr/share/nginx/html/home/

解释:

  • rsync:是一个更强大的文件同步工具。
  • -avz:表示增量传输、保留文件权限、压缩数据。
  • -e ssh:指定使用 SSH 进行传输。
  • /Users/test/Downloads/home/:本地源目录。
  • root@39.11.11.15:/usr/share/nginx/html/home/:远程目标目录。

这样,rsync 会自动创建目标目录并复制文件。

三、方法补充

常用迁移文件操作如下:

CP命令(常用于本机操作)

cp 是 Linux 中最基本的文件复制命令,语法:cp [选项] 源文件 目标文件

选项说明

  • -r 或 -R:递归复制目录及其内容(用于复制目录)。
  • -i:交互模式,覆盖前提示用户确认。
  • -v:显示详细的复制过程(verbose)。
  • -f:强制复制,覆盖目标文件而不提示。
  • -p:保留文件的原始属性(如权限、时间戳等)。
  • -a:归档模式,等同于 -dpR,保留所有文件属性和递归复制目录。
  • -u:仅当源文件比目标文件新时才复制(更新模式)。
  • -l:创建硬链接而不是复制文件。
  • -s:创建符号链接(软链接)而不是复制文件。
# 将 file1.txt 复制为 file2.txt
cp file1.txt file2.txt 

# 将 file1.txt 复制到指定目录
cp file1.txt /home/user/documents/ 

rcp命令(常用于远程操作)

rcp用在远端复制文件或目录到本地。语法:rcp [-pr][源文件或目录][目标文件或目录]

或 rcp [-pr][源文件或目录...][目标文件]

选项说明

  • -r :递归处理,将指定目录下的文件与子目录一并处理(用于复制目录)。
  • -p :保留源文件或目录的属性,包括拥有者,所属群组,权限与时间。
#复制远程文件到本地  
rcp root@192.168.8.88:./test.txt test.txt  

SCP命令(常用于安全远程操作)

scp 是加密的,更加安全的操作,rcp 是不加密的,scp 是 rcp 的升级加强版。

语法:scp [选项] [源文件] [目标路径]

常用选项说明

  • -r:递归复制整个目录。
  • -P:指定远程主机的 SSH 端口号(默认是 22)。
  • -p:保留文件的修改时间、访问时间和权限。
  • -v:显示详细的调试信息,有助于排查问题。
  • -C:启用压缩,可以加快传输速度。

例如:本机文件上传到远程机器

语法:

scp [选项] 本地文件路径 用户名@远程主机地址:远程目录路径

 使用:

scp /path/to/local/file.txt user@remotehost:/path/to/remote/directory/

​反之远程机器文件到本机

语法:

scp [选项] 用户名@远程主机地址:远程目录路径 本地文件路径

使用: 

scp user@remotehost:/path/to/remote/directory/file.txt /path/to/local/

​如果是到当前目录可以是

scp user@remotehost:/path/to/remote/directory/file.txt .

这个命令中:

  • user@remotehost:/path/to/remote/directory/file.txt 是远程主机上的文件路径。
  • . 表示当前目录。

使用 rsync 命令

是 Linux 系统中一个功能强大的文件同步工具,它能够高效地在本地或远程系统之间同步文件和目录。语法:rsync [选项] 源文件 目标文件

rsync 的特点

  • 增量同步:仅传输变化的文件部分,节省带宽和时间
  • 保留属性:可以保持文件权限、时间戳等元数据
  • 压缩传输:支持数据传输时压缩,减少网络负载
  • 灵活排除:可以排除特定文件或目录
  • 远程支持:通过 SSH 安全地同步远程服务器文件

还可以支持机器之间实时同步文件

常用选项说明

  • -a(archive): 以归档模式传输文件,保持文件属性,保留符号链接、权限、时间戳等
  • -v(verbose): 显示详细的传输信息。
  • -r(recursive): 递归传输文件夹及其子文件夹。
  • -z(compress): 在传输过程中压缩文件,减少数据量。
  • --delete: 删除目标路径中源路径不存在的文件。
  • --exclude: 排除特定的文件或文件夹,不进行同步。
  • --progress: 显示传输进度信息。
  • -e: 指定远程shell连接命令,如SSH。
rsync -avz -e ssh /home/data/docker_data/db_data/ root@192.168.8.88:/home/software/docker_servers_data/db_data/
rsync -P -avz -e ssh /home/data/docker_data/db_data/ root@192.168.8.88:/home/software/docker_servers_data/db_data/

以下是使用rsync进行断点续传的一些示例:

从本地上传文件到服务器

rsync -P -t -r -v -e [待传输文件] usr@IP:[接收目录]

从服务器下载文件到本地

rsync -P -t -r -v -e usr@IP:[待传输文件] [接收目录]

本地文件夹同步

rsync -av /path/to/source /path/to/destination

远程主机同步

rsync -azv -e ssh /path/to/source remote_host:/path/to/destination

删除目标多余文件

rsync -av --delete /path/to/source /path/to/destination

排除特定文件和目录

rsync -av --exclude='logs' --exclude='temp' /path/to/source /path/to/destination

注意事项:在使用rsync进行断点续传时,需要注意以下几点:

确保两台机器的时间同步,以避免因时间差异导致文件传输错误。

使用-P参数,它是--partial--progress的组合,可以在显示传输进度的同时支持断点续传。

传输过程中,rsync会在目标目录下生成一个临时文件,可以通过ls -a命令查看。这个临时文件在下次传输时会被用来继续传输,从而实现断点续传。

其他方法:使用CURL或WGET(适用于HTTP/HTTPS操作)

需要通过HTTP或HTTPS协议上传文件到服务器(例如,使用某些Web服务),可以使用curlwget

使用CURL上传文件:

curl -X POST -F "file=@/path/to/local/file.txt" http://remotehost/upload.php
#或者,如果服务器支持HTTP PUT方法:
curl -T /path/to/local/file.txt http://remotehost/upload.php

使用WGET上传文件(通常用于下载,但可以模拟上传):

wget --method=PUT --body-file=/path/to/local/file.txt http://remotehost/upload.php

还有FTP或者SFTP也都是可以实现的。至此就可以进行文件移动操作了

到此这篇关于Linux中实现文件复制与迁移的命令详解的文章就介绍到这了,更多相关Linux文件复制与迁移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论