Python rsync 同步

在技术不断变化的世界中,我们仍然并且可能总是会遇到需要传输或交换文件的情况。 Rsync 是一个基于 Linux 的工具,可以帮助我们指定传输细节。

本文将探讨 rsync 以及我们如何从 Python 脚本中使用它。


Python同步

如上所述,rsync 是一个强大的工具,可以帮助我们指定传输细节。 这意味着我们可以确定要从传输中排除哪些文件以及应该使用哪种 shell。

Rsync 通常用于具有高传输复杂性的传输或批量传输的文件。 也可以在 cron 的帮助下自动执行 rsync 创建的备份。

Linux 中的 rsync 命令

这就是通用 rsync 命令格式的样子。

rsync [option] [origin] [destination]

当熟悉 Linux 时,这是一个简单的命令,但我们无论如何都会将其分解。 每个命令都以关键字 rsync 开头。

接下来是一个选项,我们有多种选择。 每个选项指定我们希望执行的 rsync 的性质。

这里的出发地和目的地是我们希望将文件传输到的地方(目的地)和从哪里(出发地)。 这意味着我们必须警惕我们正在同步的内容以及我们是从本地还是远程计算机同步,因为 rsync 通常是导致文件在没有太多警告的情况下被重写的原因。

以下是 rsync 的基本和常见选项的列表。

  1. -a - 此选项有助于递归复制文件,并有助于保留文件的所有权,即使在复制文件后也是如此。
  2. -dry-run - 此选项允许我们对命令进行试验,以观察执行命令时会发生的变化。 该选项不会带来任何实际变化。
  3. -delete - 此选项有助于从目标计算机/目录中删除无关文件。
  4. -e - 此选项有助于通知 rsync 有关应使用的 shell。
  5. -exclude="*.filetype" - 此选项有助于从传输中排除所有特定文件类型。 在上面的命令中,我们将文件类型替换为实际的文件类型。 例如,-exclude="*.docx"
  6. -h - 此选项有助于启动 rsync 的帮助。
  7. -progress - 此选项有助于显示命令运行时的传输进度。
  8. -q - 此选项在后台或安静地运行所有命令。
  9. -v - 此选项进行传输,以便用户可以读取正在运行的所有进程。
  10. -z - 此选项有助于压缩同步数据。

从 Python 脚本使用 Rsync

现在有两种方法可以在 Python 中使用 Rsync。

  1. 调用 subprocess 并指定 rsync 命令。
import subprocess
subprocess.call(["rsync", "[option]", "[origin]","[destination]"])
  1. 使用 pyrsync 库

    没错,Python 现在提供了 Rsync 库。 该库不是 Rsync 的包装器,但包含 Rsync 本身的完整功能。

    我们可以通过 pip 安装这个库。

pip install pyrsync

最初,rsync 需要使用 MD5 哈希,与现代化的 Pyrsync 使用的 SHA256 相比,开发人员经常发现它已经过时了。 SHA256 满足验证过程安全性的标准要求。

虽然 Pyrsync 自推出以来没有发布过重大版本,但可以看出它在开发领域具有巨大的潜力,并且目前还不知道该库有任何错误或漏洞。

由于该库不可用,因此必须从可用的源代码构建并安装它。

Pyrsync 无需从头开始构建它提供的功能,因此有可能为我们节省大量的开发时间和资源。

它易于阅读的代码和 Pypi 的直接安装说明使其很容易融入我们的脚本。

如果系统已经安装了设置工具,我们需要运行这个命令。

$ sudo python setup.py install

即使系统没有安装工具,setup.py 脚本也会检测到不存在,并将默认设置为使用 Python 的内置 distutils。

该模块的命令脚本示例流程如下:

# In the system with the file that needs patching
>>> import pyrsync2
>>> unpatched = open("unpatched.file", "rb")
>>> hashes = pyrsync2.blockchecksums(unpatched)
# In the remote machine receiving hashes
>>> import pyrsync2
>>> patchedfile = open("patched.file", "rb")
>>> delta = pyrsync2.rsyncdelta(patchedfile, hashes)
# In the origin machine with the unpatched file after receiving delta
>>> unpatched.seek(0)
>>> save_to = open("locally-patched.file", "wb")
>>> pyrsync2.patchstream(unpatched, save_to, delta)

这里需要注意的一个要点是该库目前仅提供对 Python 3 的支持。

我们希望本文有助于您理解如何在 Python 中使用 rsync。

你可能感兴趣的:(Python,实用技巧,python,网络,服务器)