Python Rsync

Abid Ullah 2023年10月10日
Python Rsync

絶え間なく変化するテクノロジーの世界では、ファイルを転送または交換する必要がある場合が常にあります。 Rsync は、転送の詳細を指定するのに役立つ Linux ベースのツールです。

この記事では、rsync と、Python スクリプトからそれを使用する方法について説明します。

Python Rsync

前述のように、rsync は転送の詳細を指定するのに役立つ強力なツールです。 これは、転送から除外するファイルと、使用するシェルの種類を決定できることを意味します。

Rsync は通常、転送の複雑さが高い転送や、ファイルが一括転送される場合に使用されます。 rsync によって作成されたバックアップを cron の助けを借りて自動化することも可能です。

Linux の rsync コマンド

これは、一般的な rsync コマンド形式がどのように見えるかです。

rsync [option] [origin] [destination]

これは、Linux に慣れている人にとっては簡単なコマンドですが、とにかく詳しく説明します。 すべてのコマンドはキーワード rsync で始まります。

それに続いてオプションがあり、幅広い選択肢があります。 各オプションは、実行したい rsync の性質を指定します。

ここでの起点と宛先は、ファイルの転送先 (宛先) と送信元 (起点) です。 rsync は多くの場合、あまり警告なしにファイルが書き換えられる原因となるため、ローカル マシンとリモート マシンのどちらから同期しているかだけでなく、何を同期しているのかにも注意する必要があります。

以下は、rsync の基本的で一般的なオプションのリストです。

  1. -a - このオプションは、ファイルを再帰的にコピーするのに役立ち、コピーされた後でもファイルの所有権を保持するのに役立ちます。
  2. -dry-run - このオプションを使用すると、コマンドの試行を実行して、コマンドが実行された場合に生じる変化を観察できます。 このオプションは、実際の変更をもたらしません。
  3. -delete - このオプションは、目的のマシン/ディレクトリから余分なファイルを削除するのに役立ちます。
  4. -e - このオプションは、使用すべきシェルについて rsync に通知するのに役立ちます。
  5. -exclude="*.filetype" - このオプションは、特定のファイル タイプをすべて転送から除外するのに役立ちます。 上記のコマンドでは、filetype を実際のファイルタイプに置き換えます。 たとえば、-exclude="*.docx" です。
  6. -h - このオプションは、rsync のヘルプを開始するのに役立ちます。
  7. -progress - このオプションは、コマンドの実行時に転送の進行状況を表示するのに役立ちます。
  8. -q - このオプションは、すべてのコマンドをバックグラウンドで、または静かに実行します。
  9. -v - このオプションは転送を行い、実行中のすべてのプロセスをユーザーが読み取ることができるようにします。
  10. -z - このオプションは、同期されたデータを圧縮するのに役立ちます。

Python スクリプトから Rsync を使用する

Python で Rsync を利用する方法は 2つあります。

  1. subprocess を呼び出し、rsync コマンドを指定します。

    import subprocess
    
    subprocess.call(["rsync", "[option]", "[origin]", "[destination]"])
    
  2. 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 を使用する方法を理解するのに役立つことを願っています。

著者: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

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