文件上传怎么做(上)

197 阅读4分钟

rsync来做

一些压缩,断点续传,安全性的东西rsync都考虑到了,linux伟大无需多言。

我们可以先想一个问题

有一万个文件要同步,1000个重复,怎么做

主角登场:rsync

rsync 是 Linux 和 Unix 系统中常用的高效文件同步工具,可以用来在本地或远程服务器之间同步文件。它支持增量同步(只同步更改的部分)、压缩传输、多种过滤选项等,非常适合处理大规模文件同步任务。以下是使用 rsync 的基本步骤和示例。

1. 基本命令结构

rsync 的基本语法是:

rsync [选项] 源路径 目标路径

其中:

  • 源路径:你要同步的文件或文件夹的位置。
  • 目标路径:文件要同步到的位置,目标可以是本地路径或远程服务器。
  • 选项:通过这些选项可以控制同步行为,比如是否递归、压缩、显示进度等。

2. 常用选项

  • -a:归档模式,等价于 -rlptgoD,会同步文件权限、时间戳、符号链接等。
  • -v:显示详细的输出。
  • -z:在传输时压缩数据,适合带宽有限的情况。
  • --progress:显示同步过程中的详细进度信息。
  • --delete:删除目标目录中在源目录中已经不存在的文件,以保持完全同步。

3. 本地同步文件示例

将本地的 /path/to/source 文件夹同步到 /path/to/destination 文件夹:

rsync -avz --progress /path/to/source/ /path/to/destination/

说明:

  • -a:归档模式,确保文件的权限、符号链接、修改时间等信息也同步。
  • -v:显示详细信息。
  • -z:传输过程中压缩数据,减少带宽占用。
  • --progress:显示同步的进度。
  • /path/to/source/:源文件路径,注意最后的 / 表示同步的是文件夹内部内容而非文件夹本身。
  • /path/to/destination/:目标文件路径。

4. 远程同步文件

rsync 可以在本地与远程服务器之间同步文件,使用 SSH 来加密传输数据。

本地同步到远程:

rsync -avz --progress /path/to/source/ user@remote_server:/path/to/destination/

远程同步到本地:

rsync -avz --progress user@remote_server:/path/to/source/ /path/to/destination/

在这两个例子中:

  • user@remote_server:远程服务器的用户名和地址,rsync 会通过 SSH 与远程服务器连接。
  • /path/to/source//path/to/destination/:分别是源和目标路径。

5. 处理重复文件

rsync 默认会检查文件的修改时间和大小来决定是否同步。它不会同步没有变化的文件,这就是增量同步的特点,能够节省时间和带宽。

rsync -avz /path/to/source/ /path/to/destination/

如果文件内容和元数据(如修改时间)没有变化,rsync 会跳过这些文件。

6. 同步时删除目标中多余的文件

如果你想要目标目录与源目录完全一致,可以使用 --delete 选项,这会删除目标路径中那些在源路径中不存在的文件。

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

这在需要完全同步时非常有用。

7. 忽略某些文件或目录

你可以使用 --exclude 选项忽略某些文件或目录。例如,忽略所有 .tmp 文件:

rsync -avz --exclude '*.tmp' /path/to/source/ /path/to/destination/

8. 多线程并行处理

虽然 rsync 本身是单线程的,但可以通过一些脚本手动分块同步文件,以实现并行处理。例如,使用 GNU 并行工具来分批执行 rsync 命令,从而加速同步过程。

9. 示例:同步带重复文件的文件夹

假设你有 10,000 个文件,其中有 1000 个种类的文件有重复,但文件内容不会变化,且希望同步时尽量节省时间和带宽:

rsync -avz --progress --delete /path/to/source/ /path/to/destination/
  • 增量同步rsync 会自动检查哪些文件需要同步,重复文件不会被重新传输。
  • 压缩:使用 -z 选项来减少传输文件所需的带宽。

总结

使用 rsync 来同步大规模文件时,它的增量同步、压缩、并行传输等功能可以有效地提高效率,并且通过合理的选项控制,还能做到重复文件的智能去重与同步