Jak mogę automatycznie skopiować pliki na dysk USB po podłączeniu go do komputera?

18

Szukam rozwiązania do kopiowania wszystkich plików z określonego katalogu na dysku twardym do określonego katalogu na urządzeniu pamięci USB, po podłączeniu tego urządzenia.

Mam program, który pobiera dla mnie odcinki podcastów.

Chciałbym, aby te pliki były automatycznie przenoszone (lub przynajmniej kopiowane) do mojego odtwarzacza mp3 po podłączeniu go do komputera.

Mam zarówno Windows XP, jak i Linux, więc rozwiązanie dla każdego z nich będzie dla mnie działać.

daphshez
źródło
2
Zakładam, że nie jesteś zadowolony z zaplanowanej synchronizacji?
Ivo Flipse

Odpowiedzi:

23

Możesz dość łatwo zbudować własne rozwiązanie dla Windows za pomocą autorun.inf i pliku .bat.

Utwórz plik nietoperza, aby skopiować katalog na dysk USB.

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

Umieść plik bat na odtwarzaczu mp3 i utwórz plik autorun.inf, postępując zgodnie z tymi instrukcjami

Teraz powinieneś mieć własne rozwiązanie swojego problemu, ale na pewno jest możliwe, że istnieją gotowe rozwiązania :)

Paxxi
źródło
niesamowita wskazówka !!!! +10
Pomimo
1
Dziękuję za sugestię. Autorun.inf powinien być: [autorun] open = getpodcasts.bat action = kopiuj podcasty do odtwarzacza Przynajmniej Winxp sp2, otworzy to tylko AutoPlayer, z nowymi „kopiuj podcasty do odtwarzacza” u góry. Nie sądzę, aby można to zmienić i zmusić do cichego uruchomienia skryptu. Oczywiście musisz też włączyć Autoodtwarzanie. Posługiwanie się poleceniem, które potrzebuję, wyskakuje przez okno, jest naprawdę dużym impulsem, ale wciąż nie jest dokładnie tym, czego szukałem.
daphshez
fajne myślenie! :) +1
3
Czy Microsoft nie usunął po prostu możliwości używania autorun na pendrivie?
ale
10

W systemie Linux:

Jeśli nie przeszkadza ci małe skryptowanie w języku Python, możesz napisać demona, który nasłuchuje zdarzeń HAL, a następnie uruchamia skrypt po podłączeniu wybranego urządzenia. Przykładowy skrypt wygląda następująco :

#!/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)

Musisz tylko zmodyfikować device_added()funkcję, aby ograniczyć ją do konkretnego urządzenia i zastąpić os.system()wywołanie niestandardowym skryptem.

Aby ograniczyć go do napędu, volume.uuidmożna użyć właściwości, a wraz z hal-deviceprogramem można wyświetlić pełną listę dostępnych właściwości .

Aby uruchomić demona podczas uruchamiania, po prostu uruchom go /etc/rc.local.

Grumbel
źródło
Nie mogę zweryfikować, czy to dobra odpowiedź, ale zasługujesz na uznanie za sam problem! W każdym razie postaram się trochę ułatwić programistom tutaj ;-) jak ja!
Ivo Flipse
9

Windows 7 i autosynchronizacja z urządzeniem flash / USB po wstawieniu!

Pobierz SyncToy i ustal parowanie folderów oraz nazwę synchronizacji („SyncTest”)

patrz: Poradnik: Używanie SyncToy do tworzenia nocnego lustra Moich dokumentów

  • Uruchom konsolę zarządzania komputerem
  • Przeglądarka zdarzeń / dzienniki systemu Windows / system
  • Znajdź zdarzenie wstawiania multimediów
    • „Usługa usługi urządzenia przenośnego wyliczającego weszła w stan działania.” (Może być konieczne wyczyszczenie dziennika zdarzeń i wysunięcie / ponowne włożenie nośnika, aby wywołać to zdarzenie dziennika)
  • W górnym oknie wydarzenia kliknij prawym przyciskiem myszy wydarzenie i wybierz „Dołącz zadanie do tego wydarzenia”
  • Windows otwiera okno „Utwórz podstawowe zadanie”
  • Nadaj swojemu zadaniu nazwę i kliknij Dalej
  • Informacje o wydarzeniu są już wypełnione, następnie
  • Następnie akcja powinna pokazywać „Rozpocznij program”
  • W oknie Uruchom program przejdź do SyncToyCmd.exe (lub wybranej aplikacji do synchronizacji)
  • Dodaj argumenty. Jeśli twoja kopia zapasowa nosi nazwę SyncTest, wpisz „-RsyncTest”. Nie dodawaj cudzysłowów, nie dodawaj spacji po wierszu -R, w wierszu poleceń SyncToy (a może Windows 7) rozróżniana jest wielkość liter, więc SyncTest nie jest równy synctest!
  • Następnie zakończ

Możesz uruchomić zadanie bezpośrednio z Harmonogramu zadań, aby sprawdzić, czy działa. Teraz jedynym innym problemem, jaki miałem, było uruchamianie laptopa na bateriach, w Menedżerze zadań w zakładce warunków, odznacz „Rozpocznij zadanie tylko wtedy, gdy komputer jest zasilany prądem przemiennym”, w przeciwnym razie zadanie zostanie uruchomione tylko po podłączeniu zasilania sieciowego.

Ponadto, gdy USB odpytuje i rozłącza się, to zadanie będzie uruchamiane co kilka minut, właściwie trochę fajnie, cały czas jest automatycznie synchronizowane z dyskiem twardym USB :)

Steven Teal
źródło
2

Edycja: okazuje się, że SyncBack SE ma działanie wyzwalające:

Otwórz Profil, przejdź do zakładki „Kiedy”, a następnie „Wstaw”. Pozwala określić literę dysku, etykietę lub numer seryjny.

Jednak wersja SE nie jest darmowa i tylko dla systemu Windows (tak myślę)

Możesz też spróbować dodać zdarzenie Autorun do swojego programu do synchronizacji (na przykład SyncToy) za pomocą TweakUI

  • Otwórz TweakUI
  • Przejdź do mojego komputera -> autorun–> handlers
  • Kliknij przycisk Utwórz
  • Znajdź lokalizację Synctoy (pliki programów jako domyślne)
  • Kliknij dwukrotnie logo uruchamiania programu
  • Wybierz wszystkie przyciski radiowe mediów z poniższej listy.
  • Kliknij OK
  • Kliknij Zastosuj.

  • Teraz podłącz pendrive.

  • Na moim komputerze kliknij prawym przyciskiem myszy dysk i wybierz właściwości.
  • Kliknij kartę autoodtwarzania
  • Wybierz muzykę z menu rozwijanego.
  • Kliknij przycisk opcji „wybierz akcję do wykonania”
  • Teraz wybierz synchronizację z logo SyncToy
  • Powtórz dla pozostałych opcji podanych w menu rozwijanym
  • Kliknij Zastosuj, a następnie OK.
  • Wyjmij i ponownie włóż dysk, aby sprawdzić, czy zadziałał

Nie mogę znaleźć żadnego (innego) programu, który uruchomi się automatycznie po podłączeniu urządzenia USB.

Wszystkie polegają na harmonogramie, aby rozpocząć synchronizację. Możesz zdecydować, że będzie to zaplanowane co nasze, po prostu zawiedzie, jeśli urządzenie USB nie zostanie podłączone i uruchom, jeśli tak jest.

Ale szczerze mówiąc, byłoby łatwiej, jeśli po prostu klikniesz przycisk synchronizacji, musisz również ręcznie podłączyć urządzenie USB.

W każdym razie znalazłem również narzędzie do synchronizacji, które działa zarówno w systemie Linux, jak i Windows: DirSync Pro, który jest całkowicie darmowy, działa w Javie i ma ładny interfejs GUI:

*  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)
Ivo Flipse
źródło
1
możesz połączyć to z zadawanym zadaniem korzystającym z nowych zdarzeń wyzwalających w Vista i Windows 7, aby uruchomić je po podłączeniu urządzenia USB.
Paxxi
1
Myślę, że rozwiązanie autorun wspomniane w drugiej odpowiedzi może załatwić
sprawę
Dla przypomnienia, uważam, że funkcje „włóż” są nowe w SyncBack SE 5.
daphshez
1

Próbowałem metody Stevena, ale zdarzenie USB nie było wyświetlane w „Podglądzie zdarzeń / Windows Logs / System” (używam Windows 7). Rozejrzałem się trochę i odkryłem, że zdarzenia wstawiania USB znajdują się w „Podglądzie zdarzeń / Logach aplikacji i usług / Microsoft / Windows / DriverFrameworks-UserMode / Operational”. Najpierw spróbuj wyczyścić dziennik (aby ułatwić znalezienie odpowiedniego zdarzenia), a następnie włóż dysk flash USB. Odśwież dziennik, a pojawi się kilka zdarzeń. Wybrałem najwyższe zdarzenie (tj. Ostatnie) i przypisałem do niego zadanie (upewnij się, że opis zdarzenia wygląda tak, jakby zawierał coś specyficznego dla konkretnego włożonego napędu USB).

Użyłem darmowego programu SyncBack, aby dokonać właściwej synchronizacji. Działa świetnie!

GordonM
źródło
1

Używam tylko AUTORUN.INF z kilkoma partiami do synchronizacji kluczowych folderów. Bardzo prosty bardzo skuteczny.

Ponadto, jeśli masz tylko do odczytu, zarchiwizowany plik autorun.inf zawiera jego twardą umowę na wirusa USB-stick

Lekko Solone
źródło
1

Po prostu zapominasz ""i kończysz ".\dectory\" ← Ten koniec \również.

Oryginalna formuła wsadowa działa. To tylko teraz dni. W katalogach, plikach wsadowych i wierszu poleceń jest dużo miejsca.

Jak mój wygląda:

xcopy "F:\Web Stuff\Web Dev\Dev_FactorY Designs\*.*" ".\HTML_PROJ\Web Stuff\Web Dev\Dev_FactorY Designs\" /e /y
GimmiLFactorY
źródło
1

W systemie Linux zamiast ciągłego działania programu w celu nasłuchiwania zdarzeń można użyć już uruchomionych. Możesz dodać kilka haków do udev, które montują urządzenie w tymczasowej lokalizacji, a następnie uruchamia rsync, aby zsynchronizować kilka katalogów.

Nawiasem mówiąc, możesz zdefiniować określone działania zgodnie z sygnaturą urządzenia: zsynchronizuj dokumenty robocze po włożeniu określonego klucza lub muzykę, jeśli włożony jest odtwarzacz MP3 z pamięcią masową USB, lub książki po podłączeniu tam Kindle.

Tato
źródło
1

Kiedy instalowałem mały system nadzoru z Raspberry Pi, który działał na Raspbian Wheezy, musiałem ciągle przenosić wszystkie pliki z folderu FTP przesłanego przez kamerę IP. Tak więc napisałem skrypt w katalogu domowym (~) i nazwałem go raz na minutę cronem

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

move_images_to_usb to zwykły skrypt bashowy, wcześniej nie pisałem skryptów na bashu, ale ...

#!/bin/bash

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

Po włożeniu dysku USB jego nazwa to sda1 (innym dyskiem będzie sdb1, więc nie będzie działać)

57ar7up
źródło
0

Używam programu do replikacji Karenware. Jest autorką wielu małych przydatnych programów dla systemu Windows (pomyśl PowerToys z wczesnych dni W98 / W2K / XP).

Oto link. http://www.karenware.com/powertools/ptreplicator.asp

Ustaw go według harmonogramu nocnego. Jeśli napęd USB jest podłączony, zsynchronizuje folder pobierania z zawartością USB.

Jest wolne!


źródło
dzięki; ale moim problemem nie jest sama kopia (to tylko kilka plików znajdujących się w jednym katalogu), ale sprawienie, by ta kopia wydarzyła się we właściwym czasie. Zaplanowane zadanie jest fajne, ale nie do końca to, czego szukałem.
daphshez,
0

To jest stary wątek, ale pomyślałem, że mógłbym to tutaj puścić dla każdego, kto tego chce. Zmień odpowiednie informacje, aby dostosować je do swoich potrzeb, a wtedy zrobi to za Ciebie. Podziękowania dla /superuser//users/232313/tyler, który dokonał pierwszej iteracji.

@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
)
Edeetee
źródło