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 alsext4
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
undmedia_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?