如何自动将USB(闪存)驱动器的内容复制到另一个目录?

我想以这样的方式编程我的Ubuntu,它自动将USB闪存驱动器的内容复制到我的主目录中的已定义文件夹。

我希望在连接任何闪存驱动器时自动完成此操作(所以不仅仅是特定的闪存驱动器)。

下面的脚本是此脚本的相反变体; 当该脚本作用于指定的驱动器时,此脚本将作用于指定(usb)驱动器之外的所有驱动器。

它能做什么

  • 无论何时连接外部USB存储设备,脚本都会将其内容复制到您定义的目录中(在脚本的head部分: 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) 

如何使用

将脚本复制到空文件中。 在head部分中,设置:

  • 要存储插入的闪存驱动器副本的路径

     target_folder = "/path/to/directory" 
  • 您可能永久连接的设备的名称(如果您不知道,请使用lsblk

     excluded = ["media_extern", ""] 

    例如

     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-0A41media_extern 。 最后一个是我想要排除的永久连接磁盘:

     excluded = ["media_extern"] 

将脚本另存为copy_flash.py ,运行方式为:

 python3 /path/to/copy_flash.py 

如果它符合您的要求,请将其添加到您的启动应用程序:Dash> Startup Applications> Add

Interesting Posts