1 TB の HDD を持っています。Ubuntu マシンで更新するたびに、データをコピーする際に問題が発生します。Ubuntu をマウントするたびに、PC HDD から新しくダンプされたデータを外付け HDD にコピーする Ubuntu 用スクリプトの作成方法を誰か教えてもらえませんか?
答え1
バックグラウンドで実行され、ディスクがマウントされているかどうかを (たとえば) 20 秒ごとにチェックするスクリプトを使用できます。マウントされている場合は、rsync
外部ディスク上のファイルをアップロード/更新するジョブを (1 回) 実行します。
以下のスクリプトは例であり、推奨される rsync ジョブも同様です。rsyncman rsync
の詳細については、 を参照してください。接続後にバックアップ ジョブを 1 回実行し、次にディスクが切断/接続されるか、スクリプトが再起動されるまで待機します。
使い方
- 外部ディスクまたはパーティションを開き、ディスクのルート ディレクトリ内のどこかを右クリックして [プロパティ] を選択し、ディスクまたはパーティションがマウントされている場所を確認します (Nautilus プロパティ ウィンドウの [場所] フィールド)。
以下のスクリプトをコピーし、空のファイルに貼り付けて、次の行を設定します。
mounted_volume = "/mountpoint/of/the/disc"
ラインに正しいパスを設定します。
source_dir = "/path/to/source" target_dir = "/path/to/destination"
として保存しcopy_ifconnected.py
、コマンドで実行します(バックグラウンドで実行し続けます)。
python3 /path/to/copy_ifconnected.py
必要な機能がある場合は、スタートアップ アプリケーションに追加します。
スクリプト
#!/usr/bin/env python3
import subprocess
import time
mounted_volume = "/mountpoint/of/the/disc"
source_dir = "/path/to/source"
target_dir = "/path/to/destination"
rsync = "rsync -r -t"
curr_status = False
def run_backup():
rsync_job = rsync+" "+source_dir+" "+target_dir
subprocess.Popen(["/bin/bash", "-c", rsync_job])
while True:
connected = subprocess.check_output(["lsblk"]).decode("utf-8")
test1 = mounted_volume in connected; test2 = curr_status==True
if test1 != test2:
if test1 == True:
run_backup()
curr_status = True
else:
curr_status = False
time.sleep(20)