Python Rsync
絶え間なく変化するテクノロジーの世界では、ファイルを転送または交換する必要がある場合が常にあります。 Rsync
は、転送の詳細を指定するのに役立つ Linux ベースのツールです。
この記事では、rsync
と、Python スクリプトからそれを使用する方法について説明します。
Python Rsync
前述のように、rsync
は転送の詳細を指定するのに役立つ強力なツールです。 これは、転送から除外するファイルと、使用するシェルの種類を決定できることを意味します。
Rsync は通常、転送の複雑さが高い転送や、ファイルが一括転送される場合に使用されます。 rsync
によって作成されたバックアップを cron
の助けを借りて自動化することも可能です。
Linux の rsync
コマンド
これは、一般的な rsync
コマンド形式がどのように見えるかです。
rsync [option] [origin] [destination]
これは、Linux に慣れている人にとっては簡単なコマンドですが、とにかく詳しく説明します。 すべてのコマンドはキーワード rsync
で始まります。
それに続いてオプションがあり、幅広い選択肢があります。 各オプションは、実行したい rsync
の性質を指定します。
ここでの起点と宛先は、ファイルの転送先 (宛先) と送信元 (起点) です。 rsync
は多くの場合、あまり警告なしにファイルが書き換えられる原因となるため、ローカル マシンとリモート マシンのどちらから同期しているかだけでなく、何を同期しているのかにも注意する必要があります。
以下は、rsync
の基本的で一般的なオプションのリストです。
-a
- このオプションは、ファイルを再帰的にコピーするのに役立ち、コピーされた後でもファイルの所有権を保持するのに役立ちます。-dry-run
- このオプションを使用すると、コマンドの試行を実行して、コマンドが実行された場合に生じる変化を観察できます。 このオプションは、実際の変更をもたらしません。-delete
- このオプションは、目的のマシン/ディレクトリから余分なファイルを削除するのに役立ちます。-e
- このオプションは、使用すべきシェルについてrsync
に通知するのに役立ちます。-exclude="*.filetype"
- このオプションは、特定のファイル タイプをすべて転送から除外するのに役立ちます。 上記のコマンドでは、filetype
を実際のファイルタイプに置き換えます。 たとえば、-exclude="*.docx"
です。-h
- このオプションは、rsync
のヘルプを開始するのに役立ちます。-progress
- このオプションは、コマンドの実行時に転送の進行状況を表示するのに役立ちます。-q
- このオプションは、すべてのコマンドをバックグラウンドで、または静かに実行します。-v
- このオプションは転送を行い、実行中のすべてのプロセスをユーザーが読み取ることができるようにします。-z
- このオプションは、同期されたデータを圧縮するのに役立ちます。
Python スクリプトから Rsync を使用する
Python で Rsync を利用する方法は 2つあります。
-
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
を使用する方法を理解するのに役立つことを願っています。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn