У меня есть жесткий диск на 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)