GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment copier automatiquement le contenu d'un lecteur USB (flash) vers un autre répertoire ?

Je souhaite programmer mon Ubuntu de manière à ce qu'il copie automatiquement le contenu de la clé USB dans un dossier défini de mon répertoire personnel.

J'aimerais que cela se fasse automatiquement quand quelqu'un un lecteur flash est connecté (donc pas seulement des lecteurs spécifiques).

Réponse acceptée :

Le script ci-dessous est une variante opposée de ce script ; tandis que celui-ci agit sur spécifié lecteurs, ce script agit sur tous sauf lecteurs (usb) spécifiés.

Ce qu'il fait

  • Chaque fois qu'un périphérique de stockage USB externe est connecté, le script copie son contenu dans un répertoire, défini par vous (dans la section head du script :target_folder = ). Un sous-répertoire est créé avec le nom du lecteur à partir duquel il a été copié.
  • Si le dossier cible (copie antérieure du contenu du disque) existe, il écrase la copie antérieure.
  • J'ai également ajouté une entrée excluded = , dans lequel vous pouvez (et devriez probablement) répertorier les noms de vos périphériques USB "normaux" (permanents) (les lecteurs "normaux" sont déjà automatiquement exclus). il semble qu'Ubuntu définisse le type de périphérique principalement par le système de fichiers; J'ai testé le formatage d'un lecteur flash en tant que ext4 , et il s'est affiché comme un lecteur "normal" au lieu d'un lecteur flash.

Le scénario

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

Comment utiliser

Copiez le script dans un fichier vide. Dans la section d'en-tête, définissez :

  • le chemin d'accès à l'endroit où vous souhaitez stocker les copies de vos lecteurs flash insérés

    target_folder = "/path/to/directory"
    
  • les noms de vos appareils éventuellement connectés en permanence (utilisez lsblk si vous ne savez pas)

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

    Par exemple :

    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  
    

    Dans la sortie de mon lsblk , il y a deux appareils :19C3-0A41 et media_extern . Le dernier est mon disque connecté en permanence que je souhaite exclure :

    excluded = ["media_extern"]
    

Enregistrez le script sous copy_flash.py , exécutez-le par :

python3 /path/to/copy_flash.py

S'il fait ce que vous voulez, ajoutez-le à vos applications de démarrage :Dash> Startup Applications> Add

En relation:Comment supprimer l'applet d'indicateur d'icône de messagerie dans Ubuntu ?
Ubuntu
  1. Comment exécuter un programme C++ à chaque fois qu'une clé USB est insérée ?

  2. Comment copier le chemin du répertoire actuel dans Ubuntu 18.04 ?

  3. Comment copier les 10 fichiers les plus récents d'un répertoire à un autre ?

  4. Comment copier la sortie du terminal ?

  5. Comment exécuter automatiquement un script lorsque le contenu d'un répertoire change sous Linux ?

Comment formater une clé USB dans Ubuntu

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Comment réparer le chargeur de démarrage GRUB à l'aide d'un lecteur USB Ubuntu Live

Comment migrer le répertoire HOME sous Linux

Comment chiffrer une clé USB dans Ubuntu - Chiffrement LUKS avec cryptsetup

Comment créer une clé USB amorçable Linux [Tutoriel]