GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come copiare automaticamente il contenuto di un'unità USB (flash) in un'altra directory?

Voglio programmare il mio Ubuntu in modo tale che copi automaticamente il contenuto dell'unità flash USB in una cartella definita nella mia home directory.

Vorrei che ciò avvenisse automaticamente quando qualsiasi unità flash in corso di connessione (quindi non solo quelle specifiche).

Risposta accettata:

Lo script seguente è una variante opposta di questo script; mentre quello agisce su specificato unità, questo script agisce su tutti tranne unità (USB) specificate.

Cosa fa

  • Ogni volta che viene collegato un dispositivo di archiviazione USB esterno, lo script ne copia il contenuto in una directory, definita da te (nella sezione head dello script:target_folder = ). Viene creata una sottodirectory con il nome dell'unità da cui è stata copiata.
  • Se la cartella di destinazione (copia precedente del contenuto del disco) esiste, sovrascrive la copia precedente.
  • Ho anche aggiunto una voce excluded = , in cui puoi (e probabilmente dovresti) elencare i nomi dei tuoi dispositivi usb "normali", (permanenti) (le unità "normali" sono escluse già automaticamente). sembra che Ubuntu definisca il tipo di dispositivo principalmente dal file system; Ho provato a formattare un'unità flash come ext4 , e si presentava come un'unità "normale" anziché come un'unità flash.

Il copione

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

Come si usa

Copia lo script in un file vuoto. Nella sezione testa, imposta:

  • il percorso in cui desideri archiviare le copie delle unità flash inserite

    target_folder = "/path/to/directory"
    
  • i nomi dei tuoi dispositivi eventualmente collegati in modo permanente (usa lsblk se non lo sai)

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

    Ad esempio :

    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  
    

    Nell'output del mio lsblk , ci sono due dispositivi:19C3-0A41 e media_extern . L'ultimo è il mio disco connesso in modo permanente che voglio escludere:

    excluded = ["media_extern"]
    

Salva lo script come copy_flash.py , eseguilo da:

python3 /path/to/copy_flash.py

Se fa quello che vuoi, aggiungilo alle tue applicazioni di avvio:Dash> Applicazioni di avvio> Aggiungi

Correlati:come rimuovere l'applet dell'indicatore dell'icona di posta in Ubuntu?
Ubuntu
  1. Come eseguire il programma C++ ogni volta che viene inserita un'unità flash USB?

  2. Come copiare il percorso della directory corrente in Ubuntu 18.04?

  3. Perché non riesco a copiare un gran numero di file sull'unità flash USB?

  4. Come creare un Memtest86+ avviabile su un'unità flash USB?

  5. Come eseguire automaticamente uno script quando il contenuto di una directory cambia in Linux?

Come formattare un'unità USB in Ubuntu

Come copiare un file da un'altra directory a quella corrente?

Come riparare il bootloader GRUB utilizzando un'unità USB live di Ubuntu

Come migrare la directory HOME su Linux

Come crittografare un'unità flash USB in Ubuntu – Crittografia LUKS con cryptsetup

Come creare un'unità flash USB avviabile da Linux [Tutorial]