GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo copiar automáticamente el contenido de una unidad USB (flash) a otro directorio?

Quiero programar mi Ubuntu de tal manera que copie automáticamente el contenido de la unidad flash USB en una carpeta definida en mi directorio de inicio.

Me gustaría que esto se hiciera automáticamente cuando cualquiera se está conectando una unidad flash (no solo unidades específicas).

Respuesta aceptada:

El siguiente guión es una variante opuesta de este guión; mientras que uno actúa sobre especificado unidades, este script actúa en todos los excepto unidades (usb) especificadas.

Qué hace

  • Siempre que se conecta un dispositivo de almacenamiento USB externo, la secuencia de comandos copia su contenido en un directorio definido por usted (en la sección principal de la secuencia de comandos:target_folder = ). Se crea un subdirectorio con el nombre de la unidad desde la que se copió.
  • Si existe la carpeta de destino (una copia anterior del contenido del disco), sobrescribe la copia anterior.
  • También agregué una entrada excluded = , en el que puede (y probablemente debería) enumerar los nombres de sus dispositivos USB "normales" (permanentes) (las unidades "normales" ya se excluyen automáticamente). parece que Ubuntu define el tipo de dispositivo principalmente por el sistema de archivos; Probé formateando una unidad flash como ext4 , y apareció como una unidad "normal" en lugar de una unidad flash.

El guión

#!/usr/bin/env python3

import subprocess
import time
import shutil

#--
target_folder = "/path/to/target_folder"
excluded = ["media_extern"]
#--

def get_mountedlist():
    return [(item.split()[0].replace("├─", "").replace("└─", ""),
             item[item.find("/"):]) for item in subprocess.check_output(
            ["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("n") if "/" in item]

def identify(disk):
    command = "find /dev/disk -ls | grep /"+disk
    output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    if "usb" in output:
        return True
    else:
        return False

done = []
while True:
    mounted = get_mountedlist()
    new_paths = [dev for dev in get_mountedlist() if not dev in done and not dev[1] == "/"]
    valid = [dev for dev in new_paths if (identify(dev[0]), dev[1].split("/")[-1]  in excluded) == (True, False)]
    for item in valid:
        target = target_folder+"/"+item[1].split("/")[-1]
        try:
            shutil.rmtree(target)
        except FileNotFoundError:
            pass
        shutil.copytree(item[1], target)
    done = mounted
    time.sleep(4)

Cómo usar

Copie el script en un archivo vacío. En la sección principal, establece:

  • la ruta donde desea almacenar las copias de sus unidades flash insertadas

    target_folder = "/path/to/directory"
    
  • los nombres de sus dispositivos posiblemente conectados permanentemente (use lsblk si no lo sabes)

    excluded = ["media_extern", "<some_other_drive>"]
    

    Por ejemplo :

    sdb      8:16   1   471M  0 disk 
    └─sdb1   8:17   1   471M  0 part /media/jacob/19C3-0A41
    sdc      8:32   0 698,6G  0 disk 
    └─sdc1   8:33   0 698,6G  0 part /media/jacob/media_extern
    sr0     11:0    1  1024M  0 rom  
    

    En la salida de mi lsblk , hay dos dispositivos:19C3-0A41 y media_extern . El último es mi disco conectado permanentemente que quiero excluir:

    excluded = ["media_extern"]
    

Guarde el script como copy_flash.py , ejecutarlo por:

python3 /path/to/copy_flash.py

Si hace lo que desea, agréguelo a sus aplicaciones de inicio:Tablero> Aplicaciones de inicio> Agregar

Relacionado:¿Cómo eliminar el subprograma indicador del icono de correo en Ubuntu?
Ubuntu
  1. ¿Cómo ejecutar el programa C++ cada vez que se inserta una unidad flash USB?

  2. ¿Cómo copiar la ruta del directorio actual en Ubuntu 18.04?

  3. ¿Por qué no puedo copiar una gran cantidad de archivos a la unidad flash USB?

  4. ¿Cómo crear un Memtest86+ de arranque en una unidad flash USB?

  5. ¿Cómo ejecutar automáticamente un script cuando cambia el contenido de un directorio en Linux?

Cómo formatear una unidad USB en Ubuntu

¿Cómo copiar un archivo de otro directorio al actual?

Cómo reparar el cargador de arranque GRUB usando una unidad USB Ubuntu Live

Cómo migrar el directorio HOME en Linux

Cómo cifrar una unidad flash USB en Ubuntu:cifrado LUKS con cryptsetup

Cómo crear una unidad flash USB de arranque de Linux [Tutorial]