Chci své Ubuntu naprogramovat tak, aby automaticky zkopírovalo obsah USB flash disku do definované složky v mém domovském adresáři.
Chci, aby se to provedlo automaticky, když jakékoli flash disk se připojuje (tedy nejen konkrétní).
Přijatá odpověď:
Níže uvedený skript je opačnou variantou tohoto skriptu; zatímco ten působí na určené disky, tyto skripty fungují na všech kromě zadané (usb) disky.
Co to dělá
- Kdykoli se připojuje externí úložné zařízení USB, skript zkopíruje jeho obsah do vámi definovaného adresáře (v hlavičce skriptu:
target_folder =
). Vytvoří se podadresář s názvem jednotky, ze které byl zkopírován. - Pokud cílová složka (dřívější kopie obsahu disku) existuje, přepíše dřívější kopii.
- Přidal jsem také položku
excluded =
, ve kterém můžete (a pravděpodobně byste měli) uvést názvy svých „normálních“, (trvalých) zařízení USB („normální“ disky jsou již automaticky vyloučeny). zdá se, že Ubuntu definuje typ zařízení hlavně systémem souborů; Testoval jsem formátování flash disku jakoext4
a objevil se jako „normální“ disk namísto flash disku.
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)
Jak používat
Zkopírujte skript do prázdného souboru. V sekci hlavy nastavte:
-
cestu k místu, kam chcete uložit kopie vložených flash disků
target_folder = "/path/to/directory"
-
názvy vašich případně trvale připojených zařízení (použijte
lsblk
pokud nevíte)excluded = ["media_extern", "<some_other_drive>"]
Například :
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
Ve výstupu mého
lsblk
, existují dvě zařízení:19C3-0A41
amedia_extern
. Poslední je můj trvale připojený disk, který chci vyloučit:excluded = ["media_extern"]
Uložte skript jako copy_flash.py
, spusťte jej:
python3 /path/to/copy_flash.py
Pokud dělá to, co chcete, přidejte jej do spouštěcích aplikací:Dash> Startup Applications> Add
Související:Jak odebrat applet indikátoru ikony pošty v Ubuntu?