Saya ingin memprogram Ubuntu saya sedemikian rupa sehingga secara otomatis menyalin konten USB flash drive ke folder yang ditentukan di direktori home saya.
Saya ingin ini dilakukan secara otomatis ketika ada flash drive sedang terhubung (jadi bukan hanya yang spesifik).
Jawaban yang Diterima:
Skrip di bawah ini adalah varian kebalikan dari skrip ini; sementara yang satu bertindak pada tertentu drive, skrip ini bekerja pada semua kecuali drive (usb) yang ditentukan.
Apa fungsinya
- Setiap kali perangkat penyimpanan usb eksternal sedang terhubung, skrip menyalin kontennya ke dalam direktori, yang ditentukan oleh Anda (di bagian kepala skrip:
target_folder =
). Sub direktori dibuat dengan nama drive tempat salinannya. - Jika folder target (salinan konten disk sebelumnya) ada, folder tersebut akan menimpa salinan sebelumnya.
- Saya juga menambahkan entri
excluded =
, di mana Anda dapat (dan mungkin harus) mencantumkan nama perangkat usb "normal", (permanen) Anda (drive ("normal" sudah dikecualikan secara otomatis). tampaknya Ubuntu mendefinisikan jenis perangkat terutama oleh sistem file; Saya menguji memformat flash drive sebagaiext4
, dan itu muncul sebagai drive "normal" alih-alih flash drive.
Skrip
#!/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)
Cara menggunakan
Salin skrip ke file kosong. Di bagian kepala, atur:
-
jalur ke tempat Anda ingin menyimpan salinan flash drive yang Anda masukkan
target_folder = "/path/to/directory"
-
nama perangkat Anda yang mungkin terhubung secara permanen (gunakan
lsblk
jika Anda tidak tahu)excluded = ["media_extern", "<some_other_drive>"]
Misalnya :
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
Dalam output
lsblk
saya , ada dua perangkat:19C3-0A41
danmedia_extern
. Yang terakhir adalah disk saya yang terhubung secara permanen yang ingin saya kecualikan:excluded = ["media_extern"]
Simpan skrip sebagai copy_flash.py
, jalankan dengan:
python3 /path/to/copy_flash.py
Jika melakukan apa yang Anda inginkan, tambahkan ke aplikasi startup Anda:Dash> Startup Applications> Add
Terkait:Bagaimana Cara Menghapus Applet Indikator Ikon Surat di Ubuntu?