Python rsync 同步
在技术不断变化的世界中,我们仍然并且可能总是会遇到需要传输或交换文件的情况。 Rsync 是一个基于 Linux 的工具,可以帮助我们指定传输细节。
本文将探讨 rsync 以及我们如何从 Python 脚本中使用它。
Python同步
如上所述,rsync 是一个强大的工具,可以帮助我们指定传输细节。 这意味着我们可以确定要从传输中排除哪些文件以及应该使用哪种 shell。
Rsync 通常用于具有高传输复杂性的传输或批量传输的文件。 也可以在 cron 的帮助下自动执行 rsync 创建的备份。
Linux 中的 rsync 命令
这就是通用 rsync 命令格式的样子。
rsync [option] [origin] [destination]
当熟悉 Linux 时,这是一个简单的命令,但我们无论如何都会将其分解。 每个命令都以关键字 rsync 开头。
接下来是一个选项,我们有多种选择。 每个选项指定我们希望执行的 rsync 的性质。
这里的出发地和目的地是我们希望将文件传输到的地方(目的地)和从哪里(出发地)。 这意味着我们必须警惕我们正在同步的内容以及我们是从本地还是远程计算机同步,因为 rsync 通常是导致文件在没有太多警告的情况下被重写的原因。
以下是 rsync 的基本和常见选项的列表。
- -a - 此选项有助于递归复制文件,并有助于保留文件的所有权,即使在复制文件后也是如此。
- -dry-run - 此选项允许我们对命令进行试验,以观察执行命令时会发生的变化。 该选项不会带来任何实际变化。
- -delete - 此选项有助于从目标计算机/目录中删除无关文件。
- -e - 此选项有助于通知 rsync 有关应使用的 shell。
-
-exclude="*.filetype"
- 此选项有助于从传输中排除所有特定文件类型。 在上面的命令中,我们将文件类型替换为实际的文件类型。 例如,-exclude="*.docx"
。 - -h - 此选项有助于启动 rsync 的帮助。
- -progress - 此选项有助于显示命令运行时的传输进度。
- -q - 此选项在后台或安静地运行所有命令。
- -v - 此选项进行传输,以便用户可以读取正在运行的所有进程。
- -z - 此选项有助于压缩同步数据。
从 Python 脚本使用 Rsync
现在有两种方法可以在 Python 中使用 Rsync。
-
调用 subprocess 并指定 rsync 命令。
import subprocess subprocess.call(["rsync", "[option]", "[origin]","[destination]"])
-
使用 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 Deque Peek 介绍
发布时间:2023/06/22 浏览次数:198 分类:Python
-
本文演示了如何在 Python 中查看/检查双端队列(双端队列)前面的元素,而无需将它们从双端队列中删除。Python Deque Peek 概述
Python 中的异步请求
发布时间:2023/06/22 浏览次数:74 分类:Python
-
今天我们来学习一下异步请求; 这个讨论将引出代码示例,看看我们如何在 Python 中编写异步请求。Python 中的异步请求
Python - 等待异步函数完成
发布时间:2023/06/22 浏览次数:163 分类:Python
-
本文介绍如何创建异步函数并使用await 关键字中断进程。 我们还将学习如何在 Python 中使用任务而不是线程。
在 Python 中列出虚拟环境
发布时间:2023/06/21 浏览次数:149 分类:Python
-
在本文中,我们将讨论什么是 Python 中的虚拟环境以及列出它们的一些命令。虚拟环境是一个独立的环境,我们可以在其中安装库、包、脚本和Python解释器。
Python 中的 Urljoin 简介
发布时间:2023/06/21 浏览次数:178 分类:Python
-
本篇文章介绍了如何使用 Python 中的 urljoin() 模块形成 URL,并介绍了使用该模块时的行为。
Python 中并发方面的差异
发布时间:2023/06/21 浏览次数:68 分类:Python
-
本文将讨论如何在Python中实现并发以及其优点和缺点。线程和多线程 线程在Python中已经存在很长时间了。
Python 中从线程获取返回值
发布时间:2023/06/21 浏览次数:145 分类:Python
-
这篇文章首先讨论了线程的基础知识,并提供了一个在Python中启动线程的代码示例。然后,我们将讨论一个在线程中获取函数返回值的代码。
在 Python 中从文本创建 N-Grams
发布时间:2023/06/21 浏览次数:65 分类:Python
-
本文将讨论如何使用 Python 中的功能和库创建 n-gram。使用 for 循环在 Python 中从文本创建 n-gram 我们可以有效地创建一个 ngrams 函数,该函数接受文本和 n 值,并返回一个包含 n-gram 的列表。
用于 Python 的 Vim 自动完成
发布时间:2023/06/21 浏览次数:180 分类:Python
-
Vim(Vi Improved的缩写)是一款功能强大的文本编辑器,常被作为Python开发环境的首选。本文将探讨Vim及其用于Python的自动补全功能。