Eng*_*res 5 backup usb-drive scripts automation autorun
我想对我的 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)
Run Code Online (Sandbox Code Playgroud)
将脚本复制到一个空文件中。在头部部分,设置:
要存储插入的闪存驱动器副本的位置的路径
target_folder = "/path/to/directory"
Run Code Online (Sandbox Code Playgroud)您可能永久连接的设备的名称(lsblk如果您不知道,请使用)
excluded = ["media_extern", "<some_other_drive>"]
Run Code Online (Sandbox Code Playgroud)
例如:
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
Run Code Online (Sandbox Code Playgroud)
在 my 的输出中lsblk,有两个设备:19C3-0A41和media_extern。最后一个是我要排除的永久连接的磁盘:
excluded = ["media_extern"]
Run Code Online (Sandbox Code Playgroud)将脚本另存为copy_flash.py,通过以下方式运行:
python3 /path/to/copy_flash.py
Run Code Online (Sandbox Code Playgroud)
如果它符合您的要求,请将其添加到您的启动应用程序中:Dash > Startup Applications > Add