Необходим скрипт для копирования данных на смонтированное устройство хранения данных

Необходим скрипт для копирования данных на смонтированное устройство хранения данных

У меня есть жесткий диск на 1 ТБ. И возникают проблемы с копированием данных на него всякий раз, когда я обновляю его на своей машине Ubuntu. Может ли кто-нибудь подсказать мне, как создать скрипт для Ubuntu, чтобы при каждом монтировании копировать новые данные с жесткого диска моего ПК на мой внешний жесткий диск?

решение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)

Связанный контент