GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie kopiert man automatisch den Inhalt eines USB-Laufwerks (Flash) in ein anderes Verzeichnis?

Ich möchte mein Ubuntu so programmieren, dass es den Inhalt des USB-Sticks automatisch in einen definierten Ordner in meinem Home-Verzeichnis kopiert.

Ich möchte, dass dies automatisch geschieht, wenn irgendwelche USB-Stick angeschlossen wird (also nicht nur bestimmte).

Akzeptierte Antwort:

Das folgende Skript ist eine entgegengesetzte Variante dieses Skripts; während dieser auf angegeben einwirkt Laufwerke, wirkt dieses Skript auf allen außer angegebenen (USB-)Laufwerke.

Was es tut

  • Immer wenn ein externer USB-Speicher angeschlossen wird, kopiert das Skript dessen Inhalt in ein von Ihnen definiertes Verzeichnis (im Kopfbereich des Skripts:target_folder = ). Es wird ein Unterverzeichnis mit dem Namen des Laufwerks erstellt, von dem es kopiert wurde.
  • Wenn der Zielordner (frühere Kopie des Inhalts der Festplatte) existiert, wird die frühere Kopie überschrieben.
  • Ich habe auch einen Eintrag excluded = hinzugefügt , in dem Sie die Namen Ihrer „normalen“, (permanenten) USB-Geräte auflisten können (und wahrscheinlich sollten) („normale“ Laufwerke sind bereits automatisch ausgeschlossen). es scheint, dass Ubuntu den Gerätetyp hauptsächlich durch das Dateisystem definiert; Ich habe das Formatieren eines Flash-Laufwerks als ext4 getestet , und es wurde als „normales“ Laufwerk statt als Flash-Laufwerk angezeigt.

Das Skript

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

Verwendung

Kopieren Sie das Skript in eine leere Datei. Legen Sie im Head-Bereich fest:

  • den Pfad, wo Sie die Kopien Ihrer eingelegten Flash-Laufwerke speichern möchten

    target_folder = "/path/to/directory"
    
  • die Namen Ihrer möglicherweise dauerhaft verbundenen Geräte (verwenden Sie lsblk falls du es nicht weißt)

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

    Zum Beispiel :

    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  
    

    In der Ausgabe meines lsblk , gibt es zwei Geräte:19C3-0A41 und media_extern . Die letzte ist meine permanent verbundene Festplatte, die ich ausschließen möchte:

    excluded = ["media_extern"]
    

Speichern Sie das Skript als copy_flash.py , führen Sie es aus durch:

python3 /path/to/copy_flash.py

Wenn es das tut, was Sie wollen, fügen Sie es Ihren Startanwendungen hinzu:Dash> Startanwendungen> Hinzufügen

Verwandte:Wie entferne ich das Mail Icon Indicator Applet in Ubuntu?
Ubuntu
  1. Wie führt man ein C++-Programm aus, wenn ein USB-Flash-Laufwerk eingesteckt wird?

  2. Wie kopiert man den Pfad des aktuellen Verzeichnisses in Ubuntu 18.04?

  3. Warum kann ich keine große Anzahl von Dateien auf das USB-Flash-Laufwerk kopieren?

  4. So mounten Sie ein USB-Flash-Laufwerk unter Linux

  5. Wie kopiert man die Top 10 der neuesten Dateien von einem Verzeichnis in ein anderes?

So formatieren Sie ein USB-Laufwerk in Ubuntu

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

So reparieren Sie den GRUB-Bootloader mit einem Ubuntu Live-USB-Laufwerk

So migrieren Sie das HOME-Verzeichnis unter Linux

So verschlüsseln Sie ein USB-Flash-Laufwerk in Ubuntu – LUKS-Verschlüsselung mit cryptsetup

So erstellen Sie ein bootfähiges Linux-USB-Flash-Laufwerk [Tutorial]