17

Я ищу решение для копирования всех файлов из определенного каталога на жестком диске в определенный каталог на запоминающем устройстве USB после подключения этого устройства.

У меня есть программа, которая загружает эпизоды подкаста для меня.

Я хотел бы, чтобы эти файлы автоматически перемещались (или, по крайней мере, копировались) в мой mp3-плеер, когда я подключал его к компьютеру.

У меня есть машины с Windows XP и Linux, поэтому решение для любой из них будет работать для меня.

11 ответов11

23

Вы можете довольно легко создать собственное решение для Windows, используя autorun.inf и файл .bat.

Создайте bat-файл, чтобы скопировать каталог на ваш USB-диск.

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

Поместите файл bat на свой mp3-плеер и создайте файл autorun.inf, используя эти инструкции

Теперь у вас должно быть собственное решение вашей проблемы, но возможно, что есть готовые решения :)

10

Для 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 .

8

Windows 7 и автосинхронизация с флеш /USB-устройством при вставке!

Загрузите SyncToy и установите сопряжение вашей папки и имя синхронизации ("SyncTest")

смотрите: How-to: Использование SyncToy для создания ночного зеркала моих документов

  • Запустить консоль управления компьютером
  • Просмотр событий / журналы Windows / система
  • Найти событие вставки медиа
    • "Сервис службы переносных устройств перешел в рабочее состояние". (Вам может потребоваться очистить журнал событий и извлечь / повторно вставить носитель, чтобы вызвать это событие журнала)
  • В верхнем окне события щелкните правой кнопкой мыши событие и выберите "Прикрепить задачу к этому событию".
  • Windows открывает "Окно создания основной задачи"
  • Дайте вашей задаче имя и нажмите "Далее"
  • Информация о событии уже заполнена, следующая
  • Действие должно показать "Запустить программу", далее
  • В окне "Запуск программы" выберите «SyncToyCmd.exe» (или выбранное приложение для синхронизации).
  • Добавьте аргументы. Если ваша резервная копия называется SyncTest, введите «-RsyncTest». Не добавляйте кавычки, не добавляйте пробел после -R, командная строка SyncToy (или, возможно, Windows 7) чувствительна к регистру, поэтому SyncTest не равен synctest!
  • Далее Готово

Вы можете запустить задачу прямо из планировщика задач, чтобы убедиться, что она работает. Теперь единственной другой проблемой, с которой я столкнулся, был запуск моего ноутбука от батарей, в диспетчере задач на вкладке условий снимите флажок "Запускать задачу только при включенном питании компьютера от сети", в противном случае задача будет выполняться только при подключении к сети переменного тока.

Кроме того, когда USB опрашивает и отключает / переподключает, эта задача будет выполняться каждые пару минут, на самом деле это круто, она все время автоматически синхронизируется с жестким диском USB :)

2

Изменить: оказывается, SyncBack SE имеет триггерное действие:

Откройте профиль, перейдите на вкладку «Когда», затем «Вставить». Позволяет указать букву диска, метку или серийный номер.

Однако версия SE не является бесплатной и только для Windows (я думаю)

Или вы можете попробовать добавить событие Autorun для вашей программы синхронизации (например, SyncToy), используя TweakUI

  • Открыть TweakUI
  • Перейти к моему компьютеру -> автозапуск–> обработчики
  • Нажмите создать
  • Найти, где находится Synctoy (программные файлы по умолчанию)
  • Дважды щелкните логотип программы запуска
  • Выберите все медиа-переключатели в списке ниже.
  • Нажмите ок
  • Нажмите применить.

  • Теперь подключите ваш перьевой привод.

  • В моем компьютере щелкните правой кнопкой мыши диск и выберите свойства.
  • Нажмите вкладку автозапуска
  • Выберите музыку из выпадающего меню.
  • Нажмите переключатель «выбрать действие для выполнения»
  • Теперь выберите синхронизацию с логотипом SyncToy.
  • Повторите для других опций, указанных в раскрывающемся меню.
  • Нажмите применить, затем ок.
  • Извлеките и снова вставьте диск, чтобы увидеть, сработал ли он

Кажется, я не могу найти какую-либо (другую) программу, которая запускается автоматически при подключении вашего USB-устройства.

Все они полагаются на планирование, чтобы начать синхронизацию. Вы можете решить, что это запланировано каждый наш, он просто потерпит неудачу, если USB-устройство не подключено и работает, если оно есть.

Но, честно говоря, было бы проще, если бы вы просто щелкнули по кнопке синхронизации, вам также пришлось подключить USB-устройство вручную.

Во всяком случае, я также нашел инструмент синхронизации, который работает как в Linux, так и в Windows: DirSync Pro, который полностью бесплатный, работает на Java и имеет приятный графический интерфейс:

*  Synchronization
      o Powerful synchronization algorithm.
      o Bidirectional (Two way) and Unidirectional (One way) synchronization mode.
      o Option for various behavior of conflict resolution for Bidirectional Synchronization.
      o Synchronizes unlimited number of folders.
      o Large number of options to change the synchronization behavior.
      o Option to synchonise subdirectories recursively.
      o Synchronizes files/folders any file system (FAT, FAT16, FAT32, NTFS, WinFS, UDF, Ext2, Ext3, ...).
      o Synchronizes files from/to network drives
      o Synchronizes files from/to any mounted devices (Harddisks, USB-Sticks, Memory cards, External drives, CD/DVD's, ...).
      o Synchronization could be used for making incremental backups.
      o Option to create up to 50 backups from the modified/changed files before synchronization.
      o Option to define a backup folder.
      o Option for handling symbolic links.
      o Option for handling time-stamps.
* General
      o Easy, clear and user-friendly graphical user interface, no unnecessary gadget you never use.
      o Runs on every modern operating system including Windows™, Linux™ and Macintosh™
      o It is Portable! It does not need any installation. Just run the application!
      o Open source, it is 100% free of charge, 100% free of commercial text, 100% free of advertisements and 100% free of spyware.
      o No time/function limitations
      o Uses no local database, so no overhead
      o Does not need any installation. Just download and run it. You can put it on you USB-stick en you can run it on any computer/any platform.
* Logging
      o Advanced logging/reporting facilities. Just select a log level and define where to write the log.
      o Option to log on application level (default log)
      o Option to log on each directory level (dir log)
      o Option to define the log leven (how much to log)
1

Я просто использую AUTORUN.INF с несколькими пакетами для синхронизации ключевых папок. Очень просто, очень эффективно.

Кроме того, если у вас есть только для чтения, заархивированный файл autorun.inf содержит жесткий контракт USB-флешки

1

В Linux вместо постоянно запущенной программы для прослушивания событий вы можете использовать уже запущенные. Вы можете добавить несколько хуков в udev, которые монтируют устройство во временную папку и затем запускают rsync для синхронизации нескольких каталогов.

Кстати, вы можете определить конкретные действия в соответствии с подписью вашего устройства: синхронизировать ваши рабочие документы, когда вставлен определенный ключ, или вашу музыку, если вставлен MP3-плеер USB, или ваши книги при подключении Kindle.

1

Когда я настраивал небольшую систему наблюдения с Raspberry Pi, которая работала на Raspbian Wheezy, мне нужно было постоянно перемещать все файлы из папки FTP, которая была загружена IP-камерой. Итак, я написал скрипт в домашнем каталоге (~) и вызывал его раз в минуту с помощью cron

crontab -e
*/1 * * * * sudo ~/move_images_to_usb

move_images_to_usb - это обычный bash-скрипт, я раньше не писал скрипты для bash, но ...

#!/bin/bash

if df | grep "sda1"
then
    mkdir /media/usb0/ipcam1
    cp -r /var/ftp /media/usb0/ipcam1
    rm /var/ftp/*
fi

Когда USB-диск вставлен, он называется sda1 (другой диск будет sdb1, поэтому он не будет работать)

1

Вы просто забыли "" и закончить ".\dectory\" ← Этот конец \ косой черты.

Оригинальная пакетная формула работает, это просто дни, Есть много места в каталогах, командных файлах и командной строке HATE тех.

Как выглядит моя:

xcopy "F:\Web Stuff\Web Dev\Dev_FactorY Designs\*.*" ".\HTML_PROJ\Web Stuff\Web Dev\Dev_FactorY Designs\" /e /y
1

Я попробовал метод Стивена, но событие USB не отображалось в «Просмотр событий / Журналы Windows / Система» (я использую Windows 7). Я немного покопался и обнаружил, что события вставки USB находятся в «Просмотр событий / Журналы приложений и служб / Microsoft / Windows / DriverFrameworks-UserMode / Operational». Попробуйте сначала очистить журнал (просто, чтобы упростить поиск нужного события), затем вставьте USB-накопитель. Обновите журнал, и должно появиться несколько событий. Я выбрал самое верхнее событие (то есть самое последнее) и назначил ему задачу (убедитесь, что описание события выглядит так, как будто в нем есть что-то конкретное для конкретного USB-накопителя, который вы вставили).

Я использовал бесплатную программу SyncBack для фактической синхронизации. Работает отлично!

0

Это старая ветка, но я подумала, что сделаю это здесь для всех, кто этого хочет. Измените соответствующую информацию в соответствии с вашими потребностями, тогда она все сделает за вас. Благодарим https://superuser.com/users/232313/tyler, который сделал первую итерацию этого.

@echo off
cls
echo waiting
goto check

Change the STUFF TO COPY location to the folder that you want 
everything inside to be send to the usb's, and change the 3 instances of 
G: to whatever drive letter that the USB uses.
Good Luck!

:start
set choice=
robocopy "C:\STUFFTOCOPY" "G:" /E
echo Waiting for removal
goto wait

:check
timeout /t 1 /nobreak >nul
if exist "G:" (goto start) else goto check

:wait
timeout /t 1 /nobreak >nul
if exist "G:" (goto wait) else (
echo removed
echo waiting
goto check
)
0

Я использую программу репликатора от Karenware. Она является автором множества небольших полезных программ для Windows (вспомним PowerToys с первых дней W98/W2K/XP).

Вот ссылка. http://www.karenware.com/powertools/ptreplicator.asp

Настройте его на ночной график. Если USB-накопитель подключен, он будет синхронизировать папку загрузки с содержимым USB.

Это бесплатно!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .