O script abaixo é uma variante oposta de este script ; enquanto aquele atua em unidades especificadas , esses scripts atuam em todas as unidades exceto especificadas (usb).
O que faz
- Sempre que um dispositivo de armazenamento USB externo está sendo conectado, o script copia seu conteúdo em um diretório, definido por você (na seção head do script:
target_folder =
). Um subdiretório é criado com o nome da unidade da qual foi copiado. - Se a pasta de destino (cópia anterior do conteúdo do disco) existir, ela substituirá a cópia anterior.
- Também adicionei uma entrada
excluded =
, na qual você pode (e provavelmente deve) listar os nomes de seus dispositivos usb "normais" (permanentes) (unidades "normais" são excluídas automaticamente). parece que o Ubuntu define o tipo de dispositivo principalmente pelo sistema de arquivos; Eu testei a formatação de uma unidade flash comoext4
e ela apareceu como uma unidade "normal" em vez de uma unidade flash.
O script
#!/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)
Como usar
Copie o script em um arquivo vazio. Na seção head, defina:
-
o caminho para onde você deseja armazenar as cópias de suas unidades flash inseridas
target_folder = "/path/to/directory"
-
os nomes dos seus dispositivos possivelmente permanentemente conectados (use
lsblk
se você não souber)excluded = ["media_extern", "<some_other_drive>"]
Por exemplo :
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
Na saída do meu
lsblk
, existem dois dispositivos:19C3-0A41
emedia_extern
. O último é meu disco permanentemente conectado que desejo excluir:excluded = ["media_extern"]
Salve o script como copy_flash.py
, execute-o por:
python3 /path/to/copy_flash.py
Se ele fizer o que você deseja, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar