Я хочу программировать свою Ubuntu таким способом, которым она автоматически копирует содержание карты флэш-памяти с интерфейсом USB к определенной папке в моем корневом каталоге.
Я хотел бы, чтобы это было сделано автоматически, когда любой флеш-накопитель подключается (так не только определенные).
Сценарий ниже является противоположным - вариант этого сценария; в то время как тот действует на указанные диски, это пишет сценарий действий на всех кроме указанного (usb) диски.
target_folder =
). Подкаталог создается с названием диска, с которого это было скопировано.excluded =
, в котором Вы можете (и вероятно должен) перечислять названия Ваших "нормальных", (постоянных) USB-устройств ("нормальные" диски исключены уже автоматически). кажется, что Ubuntu определяет тип устройства главным образом файловой системой; я протестировал форматирование флеш-накопителя как ext4
, и это обнаружилось как "нормальный" диск вместо флеш-накопителя. #!/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)
Скопируйте сценарий в пустой файл. В главном разделе, наборе:
путь туда, где Вы хотите сохранить копии своих вставленных флеш-накопителей
target_folder = "/path/to/directory"
названия Ваших возможно постоянно подключенных устройств (использование lsblk
если Вы не знаете),
excluded = ["media_extern", "<some_other_drive>"]
Например:
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
В выводе моего lsblk
, существует два устройства: 19C3-0A41
и media_extern
. Последний является моим постоянно связанным диском I, хотите исключить:
excluded = ["media_extern"]
Сохраните сценарий как copy_flash.py
, выполните его:
python3 /path/to/copy_flash.py
Если это делает то, что Вы хотите, добавьте его к своим приложениям запуска: Тире> Приложения Запуска> Добавляет