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

0

Eu tenho um HDD de 1 TB. E tenho problemas para copiar dados para ele sempre que eu o atualizo no meu Ubuntu Machine.Can alguém pode me sugerir como fazer um script para o Ubuntu de tal forma que sempre que eu montei copie os dados recém-despejados do HD do meu PC para o meu disco rígido externo? >     

por kashminder 12.10.2014 / 16:28

1 resposta

1

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

O script abaixo é um exemplo, assim como o trabalho rsync sugerido. use man rsync para mais informações sobre o rsync. Ele executa o trabalho de backup uma única vez depois de 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 do mouse em algum lugar no diretório raiz do disco e escolha "propriedades" para ver onde o disco ou a partição está montada (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 certos 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 em execução em segundo plano):

python3 /path/to/copy_ifconnected.py

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

O script

#!/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)
    
por Jacob Vlijm 12.10.2014 / 22:43