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

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

第一步:编写Python脚本

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

import os
import shutil
import time

# 定义USB挂载点和目标文件夹
USB_MOUNT_POINT = '/media/pi/'
DESTINATION_DIR = '/home/pi/videos/'

# 定义视频文件扩展名列表
VIDEO_EXTENSIONS = ['.mp4', '.avi', '.mkv', '.mov']  # 根据需要添加更多扩展名

def copy_videos_from_usb():
    # 遍历USB挂载点下的所有文件和文件夹
    for item in os.listdir(USB_MOUNT_POINT):
        item_path = os.path.join(USB_MOUNT_POINT, item)
      
        # 检查是否是文件
        if os.path.isfile(item_path):
            # 检查文件扩展名是否是视频文件
            if os.path.splitext(item_path)[1].lower() in VIDEO_EXTENSIONS:
                # 构造目标文件路径
                dest_path = os.path.join(DESTINATION_DIR, os.path.basename(item_path))
                # 拷贝视频文件到目标文件夹
                shutil.copy2(item_path, dest_path)
                print(f"Copied {item_path} to {dest_path}")

        # 如果是文件夹,则递归调用自身处理子文件夹中的文件
        elif os.path.isdir(item_path):
            copy_videos_from_usb_dir(item_path)

# 监听U盘插入事件并拷贝视频文件
def main():
    while True:
        # 检查USB挂载点是否存在
        if os.path.exists(USB_MOUNT_POINT):
            # 调用函数拷贝视频文件
            copy_videos_from_usb()
            # 等待一段时间再次检查,避免频繁检测
            time.sleep(10)
        else:
            # USB未插入,等待一段时间再次检查
            time.sleep(5)

if __name__ == '__main__':
    main()

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

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

bash
sudo chmod -R 777 /home/pi/videos/

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

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

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

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

udev
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规则:

bash
sudo udevadm control --reload-rules

第四步:使Python脚本可执行

使你的Python脚本可执行:

bash
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变量以匹配实际的挂载点。

相关推荐

  1. 树莓自动拷贝U视频

    2024-03-16 22:10:02       47 阅读
  2. 树莓开机自动播放U照片和视频

    2024-03-16 22:10:02       69 阅读
  3. 静默拷贝Uppt/pptx

    2024-03-16 22:10:02       37 阅读
  4. 如何用树莓实现视频warping

    2024-03-16 22:10:02       43 阅读
  5. 树莓docker自制镜像

    2024-03-16 22:10:02       26 阅读
  6. ubuntu 挂载硬,raspberry pi 树莓,jetson

    2024-03-16 22:10:02       28 阅读
  7. 树莓上开发音视频应用常用第三方库

    2024-03-16 22:10:02       35 阅读
  8. 树莓上部署个人用Git管理自己代码

    2024-03-16 22:10:02       38 阅读
  9. 树莓Debian系统中如何用mDNS广播自己ip地址

    2024-03-16 22:10:02       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 22:10:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 22:10:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 22:10:02       87 阅读
  4. Python语言-面向对象

    2024-03-16 22:10:02       96 阅读

热门阅读

  1. Python中的QT页面简单开发设计(以计算器为例)

    2024-03-16 22:10:02       45 阅读
  2. Ubuntu快速安装docker

    2024-03-16 22:10:02       46 阅读
  3. 【Unity】详细介绍

    2024-03-16 22:10:02       43 阅读
  4. Linux-网络基础

    2024-03-16 22:10:02       43 阅读
  5. Redis 慢查询是什么?如何配置使用

    2024-03-16 22:10:02       42 阅读
  6. 通过服务器配置cros来解决跨域问题

    2024-03-16 22:10:02       43 阅读
  7. ARTS Week 21

    2024-03-16 22:10:02       43 阅读
  8. 【记录】Git A项目作为产品,B项目继承A项目

    2024-03-16 22:10:02       39 阅读
  9. 如何将csv文件转换为markdown表格

    2024-03-16 22:10:02       40 阅读