Script necessário para copiar dados para um dispositivo de armazenamento montado

Script necessário para copiar dados para um dispositivo de armazenamento montado

Eu tenho um disco rígido de 1 TB. E tenho problemas para copiar dados para ele sempre que eu atualizo na minha máquina Ubuntu. Alguém pode me sugerir como fazer um script para o Ubuntu de forma que sempre que eu montá-lo, copie os dados recém-despejados do disco rígido do meu PC para o meu disco rígido externo?

Responder1

Você pode usar um script, rodando em segundo plano, verificando a cada (por exemplo) 20 segundos se o disco está montado. Se estiver, ele executa um rsynctrabalho (uma vez) para carregar/atualizar os arquivos no disco externo.

O script abaixo é um exemplo, assim como o trabalho rsync sugerido. use man rsyncpara obter mais informações sobre rsync. Ele executa a tarefa de backup uma única vez após ser conectado, aguardando a próxima vez que o disco for desconectado/conectado ou quando o script for reiniciado.

Como usar

  • Abra o disco ou partição externa, clique com o botão direito em algum lugar no diretório raiz do disco e escolha "propriedades" para ver onde o disco ou partição está montado (no campo Localização da janela de propriedades do nautilus).
  • Copie o script abaixo, cole-o em um arquivo vazio e defina a linha:

    mounted_volume = "/mountpoint/of/the/disc"
    
  • Defina os caminhos corretos nas linhas:

    source_dir = "/path/to/source"
    target_dir = "/path/to/destination"
    

Salve-o como copy_ifconnected.py, execute-o pelo comando (e mantenha-o rodando em segundo plano):

python3 /path/to/copy_ifconnected.py

Se fizer o que você deseja, adicione-o aos seus aplicativos de inicialização.

O roteiro

#!/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)

informação relacionada