将数据复制到已安装的存储设备所需的脚本

将数据复制到已安装的存储设备所需的脚本

我有一块 1 TB 的硬盘。每当我在 Ubuntu 机器上更新它时,复制数据都会有问题。有人能建议我如何为 Ubuntu 编写一个脚本,这样每当我安装它时,都会将新转储的数据从我的 PC 硬盘复制到我的外部硬盘吗?

答案1

您可以使用在后台运行的脚本,每 20 秒(例如)检查一次光盘是否已安装。如果已安装,它会运行一次rsync作业来上传/更新外部光盘上的文件。

下面的脚本是一个示例,也是建议的 rsync 作业。使用man rsync以获取有关 rsync 的更多信息。它在连接后运行一次备份作业,等待下次磁盘断开/连接,或脚本重新启动时。

如何使用

  • 打开外部磁盘或分区,右键单击磁盘根目录中的某处并选择“属性”以查看磁盘或分区的安装位置(在 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)

相关内容