GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Cara Menyalin Isi Drive Usb (flash) Secara Otomatis Ke Direktori Lain?

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 sebagai ext4 , 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 dan media_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?
Ubuntu
  1. Bagaimana Cara Menjalankan Program C++ Setiap Kali Flash Drive Usb Dimasukkan?

  2. Bagaimana Cara Menyalin Jalur Direktori Saat Ini Di Ubuntu 18.04?

  3. Bagaimana cara membuat Memtest86+ yang dapat di-boot pada USB flash drive?

  1. Mengapa Saya Tidak Dapat Menyalin Banyak File Ke Usb Flash Drive?

  2. Cara memasang USB flash drive di Linux

  3. Bagaimana cara menjalankan skrip secara otomatis ketika konten direktori berubah di Linux?

  1. Cara Mengenkripsi Drive USB di Ubuntu 18.04 LTS

  2. Bagaimana cara menyalin 10 file terbaru teratas dari satu direktori ke direktori lain?

  3. Bagaimana cara menyalin output terminal?