我有一块 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)