Script necesario para copiar datos a un dispositivo de almacenamiento montado

Script necesario para copiar datos a un dispositivo de almacenamiento montado

Tengo un disco duro de 1 TB. Y tengo problemas para copiar datos cada vez que lo actualizo en mi máquina Ubuntu. ¿Alguien puede sugerirme cómo crear un script para Ubuntu de modo que cada vez que lo monte copie los datos recién descargados del disco duro de mi PC al disco duro externo?

Respuesta1

Podría utilizar un script que se ejecute en segundo plano y compruebe cada (por ejemplo) 20 segundos si el disco está montado. Si es así, ejecuta un rsynctrabajo (una vez) para cargar/actualizar los archivos en el disco externo.

El siguiente script es un ejemplo, al igual que el trabajo rsync sugerido. Úselo man rsyncpara obtener más información sobre rsync. Ejecuta la tarea de copia de seguridad una sola vez después de conectarse, esperando la próxima vez que se desconecte/conecte el disco, o cuando se reinicie el script.

Cómo utilizar

  • Abra el disco o partición externo, haga clic derecho en algún lugar del directorio raíz del disco y elija "propiedades" para ver dónde está montado el disco o la partición (en el campo Ubicación de la ventana de propiedades de Nautilus).
  • Copie el siguiente script, péguelo en un archivo vacío y establezca la línea:

    mounted_volume = "/mountpoint/of/the/disc"
    
  • Establezca los caminos correctos en las líneas:

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

Guárdelo como copy_ifconnected.py, ejecútelo con el comando (y manténgalo ejecutándose en segundo plano):

python3 /path/to/copy_ifconnected.py

Si hace lo que quiere, agréguelo a sus aplicaciones de inicio.

La secuencia de comandos

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

información relacionada