当我将 USB 驱动器连接到计算机时,如何自动将文件复制到其中?

当我将 USB 驱动器连接到计算机时,如何自动将文件复制到其中?

我正在寻找一种解决方案,一旦连接了该设备,就可以将所有文件从硬盘驱动器上的特定目录复制到 USB 存储设备上的特定目录。

我有一个可以为我下载播客剧集的程序。

我希望一旦将这些文件连接到计算机,这些文件就会自动移动(或至少复制)到我的 mp3 播放器中。

我有 Windows XP 和 Linux 机器,因此任何一种解决方案都适合我。

答案1

您可以轻松使用 autorun.inf 和 .bat 文件为 Windows 构建自己的解决方案。

创建一个 bat 文件来将目录复制到您的 USB 驱动器。

xcopy /e /y c:\podcasts\*.* .\dir_on_usb_drive

将 bat 文件放在你的 mp3 播放器上,然后使用以下命令创建 autorun.inf这些说明

现在你应该有自己解决问题的方案了,但也有可能已经有一些现成的解决方案了:)

答案2

对于 Linux:

如果你不介意写一点 Python 脚本,你可以编写一个守护进程来监听 HAL 事件,然后在你选择的设备插入后启动一个脚本。示例脚本如下

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import dbus
import dbus.service
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
    import dbus.glib
import gobject
import sys
import os

class DeviceManager:
    def __init__(self):
        self.bus = dbus.SystemBus()
        self.bus.add_signal_receiver(self.device_added,
                        'DeviceAdded',
                        'org.freedesktop.Hal.Manager',
                        'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

        self.bus.add_signal_receiver(self.device_removed,
                        'DeviceRemoved',
                        'org.freedesktop.Hal.Manager',
                        'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

    def udi_to_device(self, udi):
        return self.bus.get_object("org.freedesktop.Hal", udi)

    def device_added(self, udi):
        print 'Added', udi
        properties = self.udi_to_device(udi).GetAllProperties()
        if properties.get('info.category') == u'volume':
            label, dev = properties.get('volume.label'), properties.get('block.device')
            print 'Mounting %s on /media/%s' %(dev, label)
            os.system('pmount %s /media/%s' %(dev, label))

    def device_removed(self, udi):
        print 'Removed', udi

if __name__ == '__main__':
    m = DeviceManager()

    mainloop = gobject.MainLoop()
    try:
        mainloop.run()
    except KeyboardInterrupt:
        mainloop.quit()
        print 'Exiting...'
        sys.exit(0)

您只需修改该device_added()功能以将其限制到特定设备并os.system()用自定义脚本替换调用。

为了将其限制到驱动器,volume.uuid可以使用属性,并且可以使用程序显示可用属性的完整列表hal-device

要在启动时启动守护进程,只需从 启动它/etc/rc.local

答案3

插入后 Windows 7 会自动同步到您的闪存/USB 设备!

下载 SyncToy并建立文件夹配对和同步名称(“SyncTest”)

看:操作方法:使用 SyncToy 制作“我的文档”的夜间镜像

  • 运行计算机管理控制台
  • 事件查看器/Windows 日志/系统
  • 查找媒体插入事件
    • “便携式设备枚举器服务已进入运行状态。”(您可能需要清除事件日志并弹出/重新插入媒体以触发此日志事件)
  • 在上方事件窗口中,右键单击事件并选择“将任务附加到此事件”
  • Windows 打开“创建基本任务窗口”
  • 为您的任务命名并点击下一步
  • 活动信息已填写,下一步
  • 操作应显示“启动程序”,下一步
  • 在启动程序窗口中,浏览到 SyncToyCmd.exe(或您选择的同步应用程序)
  • 添加参数。如果您的备份配对名为 SyncTest,请输入“-RsyncTest”。不要添加引号,不要在 -R 后添加空格,SyncToy 命令行(或者可能是 Windows 7)区分大小写,因此 SyncTest 不等于 synctest!
  • 下一步,完成

您可以直接从任务计划程序运行该任务以验证其是否有效。现在我遇到的唯一另一个问题是使用电池运行笔记本电脑,在任务管理器的条件选项卡下,取消选中“仅当计算机使用交流电源时启动任务”,否则任务仅在插入交流电时运行。

此外,当 USB 轮询和断开/重新连接时,此任务将每隔几分钟运行一次,实际上很酷,它会一直自动同步到 USB HDD :)

答案4

我尝试了 Steven 的方法,但 USB 事件没有显示在“事件查看器/Windows 日志/系统”(我使用的是 Windows 7)中。我仔细研究了一下,发现 USB 插入事件位于“事件查看器/应用程序和服务日志/Microsoft/Windows/DriverFrameworks-UserMode/Operational”中。尝试先清除日志(只是为了更容易找到所需的事件),然后插入 USB 闪存驱动器。刷新日志,应该会出现一堆事件。我选择了最上面的事件(即最新的事件),并将任务分配给该事件(确保事件描述看起来与您插入的特定 USB 驱动器有关)。

我使用免费的 SyncBack 程序进行实际同步。效果很好!

相关内容