• 树莓派自动拷贝U盘的视频


    要在树莓派上实现插入U盘后自动拷贝其中的视频文件到本地,你可以使用Python脚本结合udev规则来检测U盘插入事件,并使用shutil库来拷贝文件。以下是一个简单的示例来实现这个功能:

    第一步:编写Python脚本

    创建一个Python脚本,比如 copy_videos_from_usb.py,并添加以下代码:

    1. import os
    2. import shutil
    3. import time
    4. # 定义USB挂载点和目标文件夹
    5. USB_MOUNT_POINT = '/media/pi/'
    6. DESTINATION_DIR = '/home/pi/videos/'
    7. # 定义视频文件扩展名列表
    8. VIDEO_EXTENSIONS = ['.mp4', '.avi', '.mkv', '.mov']  # 根据需要添加更多扩展名
    9. def copy_videos_from_usb():
    10.     # 遍历USB挂载点下的所有文件和文件夹
    11.     for item in os.listdir(USB_MOUNT_POINT):
    12.         item_path = os.path.join(USB_MOUNT_POINT, item)
    13.       
    14.         # 检查是否是文件
    15.         if os.path.isfile(item_path):
    16.             # 检查文件扩展名是否是视频文件
    17.             if os.path.splitext(item_path)[1].lower() in VIDEO_EXTENSIONS:
    18.                 # 构造目标文件路径
    19.                 dest_path = os.path.join(DESTINATION_DIR, os.path.basename(item_path))
    20.                 # 拷贝视频文件到目标文件夹
    21.                 shutil.copy2(item_path, dest_path)
    22.                 print(f"Copied {item_path} to {dest_path}")
    23.         # 如果是文件夹,则递归调用自身处理子文件夹中的文件
    24.         elif os.path.isdir(item_path):
    25.             copy_videos_from_usb_dir(item_path)
    26. # 监听U盘插入事件并拷贝视频文件
    27. def main():
    28.     while True:
    29.         # 检查USB挂载点是否存在
    30.         if os.path.exists(USB_MOUNT_POINT):
    31.             # 调用函数拷贝视频文件
    32.             copy_videos_from_usb()
    33.             # 等待一段时间再次检查,避免频繁检测
    34.             time.sleep(10)
    35.         else:
    36.             # USB未插入,等待一段时间再次检查
    37.             time.sleep(5)
    38. if __name__ == '__main__':
    39.     main()

    第二步:设置目标文件夹权限

    确保树莓派用户有权限写入目标文件夹DESTINATION_DIR。你可以使用chmod命令来设置权限:

    1. bash
    2. sudo chmod -R 777 /home/pi/videos/

    第三步:编写udev规则来触发脚本

    创建一个udev规则文件来监听U盘插入事件,并触发Python脚本执行。首先,创建一个udev规则文件:

    1. bash
    2. sudo nano /etc/udev/rules.d/99-usb-copy-videos.rules

    然后,添加以下内容到文件中:

    1. udev
    2. ACTION=="add", KERNEL=="sd*[1-9]", RUN+="/usr/bin/python3 /path/to/copy_videos_from_usb.py"

    确保将/path/to/copy_videos_from_usb.py替换为你的Python脚本的实际路径。

    保存并关闭文件后,重新加载udev规则:

    1. bash
    2. sudo udevadm control --reload-rules

    第四步:使Python脚本可执行

    使你的Python脚本可执行:

    1. bash
    2. chmod +x /path/to/copy_videos_from_usb.py

    注意事项

    确保你的树莓派已经安装了Python 3和shutil库(通常Python安装时会包含)。

    根据你的系统配置,USB挂载点可能会有所不同。你可以通过插入U盘并运行df -h来查看实际的挂载点,并相应地修改脚本中的USB_MOUNT_POINT变量。

    如果你的U盘有多个分区,可能需要处理sd*[1-9]之外的其他内核名称。

    这个脚本会不断检查USB挂载点,如果U盘被频繁地插入和拔出,可能会对系统性能产生影响。你可以调整time.sleep()中的等待时间以优化性能。

    出于安全考虑,请确保你的Python脚本只能由可信用户运行,并且不要以root权限运行它,除非绝对必要。

    如果你的U盘分区被挂载到了不同的位置(比如/media/username/USB_NAME),请确保修改脚本中的USB_MOUNT_POINT变量以匹配实际的挂载点。

  • 相关阅读:
    Unity编辑器从PC平台切换到Android平台下 Addressable 加载模型出现粉红色,类似于材质丢失的问题
    可以从以下几点着手选择期货开户公司
    2023-05-24:为什么要使用Redis做缓存?
    2-7.基金销售行为规范及信息管理
    esp32c3 nuttx 移植 micropython 尝试
    VEGAS Pro 20发布-剪辑师们,是时候更换了吗?
    热门的容器技术:Docker 和 Kubernetes 介绍
    Qemu 启动无法交互的处理方法
    精通Java事务编程(2)-弱隔离级别之已提交读
    【LeetCode专题#基本计算器】基本计算器I,图解中序表达式转逆波兰表达式,太难了
  • 原文地址:https://blog.csdn.net/stop6417/article/details/136725281