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 rsync
trabalho (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 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)