Як я можу автоматично копіювати файли на USB-накопичувач, коли підключаю його до комп'ютера?


18

Після підключення цього пристрою я шукаю рішення для копіювання всіх файлів із конкретного каталогу на жорсткому диску, до певного каталогу на пристрої пам'яті USB.

У мене є програма, яка завантажує для мене епізоди подкастів.

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

У мене є Windows XP і Linux машини, тому рішення для будь-якого з них буде працювати для мене.


2
Я припускаю, що Ви не задоволені запланованою синхронізацією?
Іво Фліпс

Відповіді:


23

Ви можете легко створити власне рішення для Windows, використовуючи autorun.inf та .bat файл.

Створіть bat-файл, щоб скопіювати каталог на свій USB-накопичувач.

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

Помістіть файл bat на свій mp3-програвач і створіть autorun.inf, використовуючи ці вказівки

Тепер у вас має бути власне домашнє рішення для вашої проблеми, але, безумовно, можливо, що там вже є готові рішення :)


дивовижна порада !!!! +10
in.spite

1
Дякую за пропозицію. Autorun.inf повинен бути: [autorun] open = getpodcasts.bat action = скопіювати подкасти на програвач Принаймні winxp sp2, це відкриє лише AutoPlayer, з новим "копіюванням подкастів на програвач" вгорі. Я не думаю, що існує спосіб змінити це і змусити його запускати сценарій безшумно. Крім того, очевидно, ви повинні увімкнути функцію автовідтворення. Отримати команду, що мені потрібна попса на вікні - це насправді велике значення, але це все одно не саме те, що я шукав.
daphshez

приємно думати! :) +1

3
Хіба Microsoft просто не видалила можливість використовувати автозапуск на палець?
але

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.


Я не можу перевірити, чи це хороша відповідь, але ти заслуговуєш на нагороду за проблеми тільки! Як би там не було, я б спробував зробити це трохи легше для непрограмістів тут ;-), як я!
Іво Фліпс

9

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

Завантажте SyncToy та встановіть спарювання папки та ім'я синхронізації ("SyncTest")

див. як: Використання SyncToy для створення нічного дзеркала Моїх документів

  • Запустіть консоль управління комп'ютером
  • Переглядач подій / журнали / система Windows
  • Знайдіть подію вставки медіа
    • "Послуга портативного передавача пристроїв увійшла до запущеного стану." (Вам може знадобитися очистити журнал подій та витягнути / повторно вставити носій, щоб запустити цю подію журналу)
  • У верхньому вікні події правою кнопкою миші натисніть на подію та виберіть "Приєднати завдання до цієї події"
  • Відкрийте Windows "Створити основне вікно завдань"
  • Дайте своє ім’я і натисніть на наступний
  • Інформація про подію вже заповнена, наступна
  • Дія має відображатись "Почати програму", далі
  • У вікні Запуск програми перейдіть до SyncToyCmd.exe (або вибраного додатка для синхронізації)
  • Додайте аргументи. Якщо резервне копіювання резервного копіювання називається SyncTest, введіть «-RsyncTest». Не додайте лапки, не додайте пробіл після командного рядка -R, SyncToy (або, можливо, Windows 7), чутливий до регістру, тому SyncTest не дорівнює синхротесту!
  • Далі, фініш

Ви можете запустити завдання прямо з планувальника завдань, щоб переконатися, що воно працює. Тепер єдиною іншою проблемою у мене був запуск мого ноутбука на батареях, в диспетчері завдань на вкладці "Зняти прапорець" зніміть прапорець "Запустити завдання лише за умови, що комп'ютер живиться від змінного струму", інакше завдання запуститься лише тоді, коли підключено мережу живлення.

Крім того, як USB опитує і відключає / відновлює, це завдання буде виконуватись кожні пару хвилин, насправді якось круто, воно постійно синхронізується з USB HDD :)


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
Ви можете, можливо, поєднати це з плановим завданням, яке використовує нові події тригера у Vista та Windows 7, щоб запустити його, коли підключено пристрій usb.
Пакссі

1
Я думаю, що рішення автозапуску, згадане в іншій відповіді, могло б зробити трюк
Іво Фліпс

Як зауваження, я вважаю, що функції "вставки" є новими для SyncBack SE 5.
daphshez

1

Я спробував метод Стівена, але подія USB не відображалася в "Переглядачі подій / Журнали / Система Windows" (я використовую Windows 7). Я трохи покатався і дізнався, що події вставлення USB знаходяться в "Переглядачі подій / Журнали програм та служб / Microsoft / Windows / DriverFrameworks-UserMode / Operative". Спробуйте спочатку очистити журнал (лише щоб полегшити пошук потрібної події), а потім вставити флешку. Оновіть журнал, і купа подій має з’явитися. Я вибрав найпопулярнішу подію (тобто найсвіжішу) і призначив це завдання (переконайтесь, що опис події виглядає так, що він має щось конкретне для конкретного USB-накопичувача, який ви вставили).

Я використовував безкоштовну програму SyncBack для фактичної синхронізації. Чудово працює!


1

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

Крім того, якщо у вас є лише читання, заархівовано autorun.inf подає його жорсткий контракт з вірусом usb-stick


1

Ви просто просто забуваєте ""і закінчуєте ".\dectory\" ← Цей кінець \нахилу також.

Оригінальна формула пакетної роботи працює. Це просто дні, Є багато місця в каталогах, пакетних файлах та командному рядку.

Як виглядає моя:

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

1

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

До речі, ви можете визначити конкретні дії відповідно до підпису вашого пристрою: синхронізуйте свої робочі документи, коли вставлена ​​певна клавіша, або музику, якщо вставлений USB-плеєр з масовим зберіганням 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, тому він не працюватиме)


0

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

Ось посилання. http://www.karenware.com/powertools/ptreplicator.asp

Встановіть це за нічним графіком. Якщо USB-накопичувач підключений, він синхронізує папку для завантаження із вмістом USB.

Це безкоштовно!


Спасибі; але моя проблема - це не сама копія (це лише купа файлів, що знаходяться в одній директорії), а створення цієї копії в потрібний час. Заплановане завдання - це приємно, але не зовсім те, що я шукав.
daphshez

0

Це стара нитка, але я думав, що я буду тут це для всіх, хто цього хоче. Змініть відповідну інформацію відповідно до ваших потреб, тоді вона зробить все за вас. Заслуга /superuser//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
)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.