Wie kann ich Dateien automatisch auf ein USB-Laufwerk kopieren, wenn ich es an meinen Computer anschließe?

17

Ich suche nach einer Lösung zum Kopieren aller Dateien aus einem bestimmten Verzeichnis auf der Festplatte in ein bestimmtes Verzeichnis auf einem USB-Speichergerät, sobald dieses Gerät angeschlossen ist.

Ich habe ein Programm, das Podcast-Folgen für mich herunterlädt.

Ich möchte, dass diese Dateien automatisch auf meinen MP3-Player verschoben (oder zumindest kopiert) werden, sobald ich ihn an den Computer anschließe.

Ich besitze sowohl Windows XP- als auch Linux-Computer, sodass eine Lösung für jeden von ihnen für mich funktioniert.

Daphshez
quelle
2
Ich nehme an, Sie sind mit einer geplanten Synchronisierung nicht zufrieden?
Ivo Flipse

Antworten:

23

Mit autorun.inf und einer .bat-Datei können Sie ganz einfach Ihre eigene Lösung für Windows erstellen.

Erstellen Sie eine bat-Datei, um ein Verzeichnis auf Ihr USB-Laufwerk zu kopieren.

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

Legen Sie die bat-Datei auf Ihren MP3-Player und erstellen Sie eine autorun.inf mit diesen Anweisungen

Jetzt solltest du eine eigene, selbst erstellte Lösung für dein Problem haben, aber es ist durchaus möglich, dass es bereits vorgefertigte Lösungen gibt :)

Paxxi
quelle
super tipp !!!! +10
trotz
1
Danke für den Vorschlag. Die autorun.inf sollte lauten: [autorun] open = getpodcasts.bat action = Podcasts auf Player kopieren Zumindest WinXP SP2 öffnet dies nur den AutoPlayer mit dem neuen "Podcasts auf Player kopieren" oben. Ich glaube nicht, dass es eine Möglichkeit gibt, dies zu überschreiben und es zu zwingen, das Skript unbeaufsichtigt auszuführen. Natürlich muss auch AutoPlay aktiviert sein. Den Befehl, den ich brauche, auf dem Fenster zu haben, ist eigentlich eine große Aufgabe, aber es ist immer noch nicht genau das, wonach ich gesucht habe.
Daphshez
nettes Denken! :) +1
3
Hat Microsoft nicht einfach die Möglichkeit entfernt, Autorun auf einem USB-Stick zu verwenden?
Ale
10

Für Linux:

Wenn Sie nicht ein wenig Python Scripting dagegen könnte man einen Dämon schreiben , die für Veranstaltungen HAL zuhört und startet dann ein Skript einmal ein Gerät Ihrer Wahl angeschlossen wurde Ein Beispiel - Script aussehen würde. Dies :

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

Sie müssen nur die device_added()Funktion ändern , um sie auf das jeweilige Gerät zu beschränken und den os.system()Aufruf durch Ihr benutzerdefiniertes Skript zu ersetzen .

Um es auf das Laufwerk zu beschränken, kann die volume.uuidEigenschaft verwendet werden und eine vollständige Liste der verfügbaren Eigenschaften kann mit dem hal-deviceProgramm angezeigt werden.

Um den Daemon beim Booten zu starten, starten Sie ihn einfach von /etc/rc.local.

Grumbel
quelle
Ich kann nicht verifizieren, ob dies eine gute Antwort ist, aber Sie verdienen eine Aufwertung nur für die Mühe! Jedenfalls würde ich versuchen, es den Nicht-Programmierern hier etwas leichter zu machen ;-) so wie ich!
Ivo Flipse
8

Windows 7 und Autosync auf Ihr Flash / USB-Gerät beim Einstecken!

Laden Sie SyncToy herunter und stellen Sie die Ordnerzuordnung und den Synchronisierungsnamen her ("SyncTest").

Siehe: Vorgehensweise: Verwenden von SyncToy, um eine nächtliche Spiegelung von "Eigene Dateien" zu erstellen

  • Führen Sie die Computerverwaltungskonsole aus
  • Ereignisanzeige / Windows-Protokolle / System
  • Suchen Sie das Ereignis zum Einfügen von Medien
    • "Der Dienst" Portable Device Enumerator Service "ist in den aktiven Zustand eingetreten." (Möglicherweise müssen Sie Ihr Ereignisprotokoll löschen und den Datenträger auswerfen / erneut einlegen, um dieses Protokollereignis auszulösen.)
  • Klicken Sie im oberen Ereignisfenster mit der rechten Maustaste auf das Ereignis und wählen Sie "Aufgabe an dieses Ereignis anhängen".
  • Windows öffnen "Create Basic Task Window"
  • Geben Sie Ihrer Aufgabe einen Namen und drücken Sie als nächstes
  • Ereignisinformationen sind bereits als nächstes ausgefüllt
  • Die Aktion sollte als nächstes "Programm starten" anzeigen
  • Navigieren Sie im Fenster "Programm starten" zu "SyncToyCmd.exe" (oder der von Ihnen ausgewählten Synchronisierungs-App).
  • Argumente hinzufügen. Wenn Ihre Sicherungskopplung SyncTest heißt, geben Sie "-RsyncTest" ein. Fügen Sie keine Anführungszeichen hinzu, und fügen Sie kein Leerzeichen nach -R ein. Bei SyncToy (oder Windows 7) ist die Groß- und Kleinschreibung zu beachten, sodass SyncTest nicht gleich synctest ist!
  • Als nächstes Fertig stellen

Sie können die Aufgabe direkt vom Aufgabenplaner aus ausführen, um zu überprüfen, ob sie funktioniert. Das einzige andere Problem, das ich hatte, war das Betreiben meines Laptops mit Batterien. Deaktivieren Sie im Task-Manager unter den Bedingungen das Kontrollkästchen "Task nur starten, wenn der Computer mit Netzstrom versorgt wird". Andernfalls wird der Task nur ausgeführt, wenn Netzstrom angeschlossen ist.

Während USB abfragt und die Verbindung trennt / wieder herstellt, wird diese Aufgabe alle paar Minuten ausgeführt. Eigentlich ist es cool, dass sie die ganze Zeit automatisch mit der USB-Festplatte synchronisiert wird :)

Steven Teal
quelle
2

Bearbeiten: Es stellt sich heraus, dass SyncBack SE eine Trigger-Aktion hat:

Öffnen Sie das Profil, gehen Sie auf die Registerkarte „Wann“ und dann auf „Einfügen“. Hier können Sie einen Laufwerksbuchstaben, eine Bezeichnung oder eine Seriennummer angeben.

Allerdings ist die SE-Version nicht kostenlos und nur für Windows (glaube ich)

Sie können auch versuchen, mit TweakUI ein Autorun-Ereignis für Ihr Synchronisierungsprogramm hinzuzufügen (Beispiel für SyncToy)

  • Öffnen Sie TweakUI
  • Gehen Sie zu meinem Computer -> Autorun -> Handler
  • Klicken Sie auf "Erstellen"
  • Finden Sie, wo sich Synctoy befindet (Programmdateien als Standard)
  • Doppelklicken Sie auf das Logo des Programmstarters
  • Wählen Sie alle Medien-Optionsfelder in der folgenden Liste aus.
  • OK klicken
  • Klicken Sie auf Übernehmen.

  • Schließen Sie jetzt Ihr USB-Stick an.

  • Klicken Sie in meinem Computer mit der rechten Maustaste auf das Laufwerk und wählen Sie Eigenschaften.
  • Klicken Sie auf die Registerkarte Autoplay
  • Wählen Sie Musik aus dem Dropdown-Menü.
  • Klicken Sie auf das Optionsfeld "Aktion zum Ausführen auswählen".
  • Wählen Sie nun die Synchronisierung mit dem SyncToy-Logo
  • Wiederholen Sie diesen Vorgang für die anderen im Dropdown-Menü angegebenen Optionen
  • Klicken Sie auf Übernehmen und dann auf OK.
  • Entfernen Sie das Laufwerk, und setzen Sie es erneut ein, um festzustellen, ob es funktioniert hat

Ich kann anscheinend kein (anderes) Programm finden, das automatisch startet, wenn Sie Ihr USB-Gerät anschließen.

Sie alle verlassen sich auf die Zeitplanung, um die Synchronisierung zu starten. Sie können festlegen, dass es zu jedem Zeitpunkt geplant wird. Wenn das USB-Gerät nicht angeschlossen ist, schlägt es einfach fehl und wird ausgeführt, wenn dies der Fall ist.

Aber um ehrlich zu sein, wäre es einfacher, wenn Sie einfach auf die Schaltfläche "Synchronisieren" klicken und Ihr USB-Gerät auch manuell anschließen müssten.

Auf jeden Fall habe ich auch ein Synchronisationstool gefunden, das sowohl unter Linux als auch unter Windows läuft: DirSync Pro ist völlig kostenlos, läuft auf Java und hat eine schöne 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
quelle
1
Sie können dies möglicherweise mit einer geplanten Aufgabe kombinieren, die die neuen Triggerereignisse in Vista und Windows 7 verwendet, damit sie ausgeführt werden, wenn ein USB-Gerät angeschlossen ist.
Paxxi
1
Ich denke, die in der anderen Antwort erwähnte Autorun-Lösung könnte den Trick machen
Ivo Flipse
Nur als Hinweis, ich glaube, die "On Insert" -Funktionen sind neu in SyncBack SE 5.
daphshez
1

Ich habe Stevens Methode ausprobiert, aber das USB-Ereignis wurde nicht in "Ereignisanzeige / Windows-Protokolle / System" angezeigt (ich verwende Windows 7). Ich stöberte ein wenig herum und fand heraus, dass sich die Ereignisse zum Einfügen von USB-Geräten unter "Ereignisanzeige / Anwendungs- und Dienstprotokolle / Microsoft / Windows / DriverFrameworks-UserMode / Operational" befinden. Versuchen Sie zunächst, das Protokoll zu löschen (um das Auffinden des gewünschten Ereignisses zu vereinfachen), und stecken Sie dann den USB-Stick ein. Aktualisieren Sie das Protokoll, und eine Reihe von Ereignissen sollte angezeigt werden. Ich habe das oberste Ereignis (dh das jüngste) ausgewählt und die Aufgabe diesem zugewiesen (stellen Sie sicher, dass die Ereignisbeschreibung so aussieht, als hätte sie etwas Spezielles für das von Ihnen eingesteckte USB-Laufwerk).

Ich habe das kostenlose SyncBack-Programm verwendet, um die eigentliche Synchronisierung durchzuführen. Funktioniert super!

GordonM
quelle
1

Ich verwende nur eine AUTORUN.INF mit ein paar Stapeln, um Schlüsselordner zu synchronisieren. Sehr einfach, sehr effektiv.

Wenn Sie eine schreibgeschützte Datei haben, archiviert autorun.inf die Festplatte des USB-Stick-Virus

Leicht gesalzen
quelle
1

Du vergisst einfach nur ""und ".\dectory\" beendest ← Auch diesen \Schrägstrich.

Die ursprüngliche Batch-Formel funktioniert. Es ist gerade erst Tage her. In Verzeichnissen, Batch-Dateien und der Eingabeaufforderung HASSEN Sie diese Leerzeichen.

Wie meins aussieht:

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

Unter Linux können Sie anstelle eines Programms, das kontinuierlich ausgeführt wird, um auf Ereignisse zu warten, die bereits ausgeführten Programme verwenden. Sie können udev einige Hooks hinzufügen, die das Gerät an einem temporären Speicherort bereitstellen und dann rsync starten, um eine Reihe von Verzeichnissen zu synchronisieren.

Übrigens können Sie bestimmte Aktionen entsprechend Ihrer Gerätesignatur definieren: Synchronisieren Sie Ihre Arbeitsdokumente, wenn ein bestimmter Schlüssel eingesteckt ist, oder Ihre Musik, wenn ein USB-Massenspeicher-MP3-Player eingesteckt ist, oder Ihre Bücher, wenn Sie dort einen Kindle einstecken.

Daduke
quelle
1

Als ich mit Raspberry Pi ein kleines Überwachungssystem einrichtete, das auf Raspbian Wheezy lief, musste ich ständig alle Dateien aus dem FTP-Ordner verschieben, die von der IP-Kamera hochgeladen wurden. Also schrieb ich ein Skript im Home-Verzeichnis (~) und rief es einmal pro Minute mit cron auf

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

move_images_to_usb ist ein gewöhnliches Bash-Skript, ich habe vorher noch kein Skript für Bash geschrieben, aber ...

#!/bin/bash

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

Wenn ein USB-Laufwerk angeschlossen ist, heißt es sda1 (ein anderes Laufwerk ist sdb1, daher funktioniert es nicht)

57ar7up
quelle
0

Ich benutze ein Replikationsprogramm von Karenware. Sie ist die Autorin vieler kleiner nützlicher Programme für Windows (denken Sie an PowerToys aus den frühen Tagen von W98 / W2K / XP).

Hier ist der Link. http://www.karenware.com/powertools/ptreplicator.asp

Richten Sie es nach einem nächtlichen Zeitplan ein. Wenn das USB-Laufwerk angeschlossen ist, wird der Download-Ordner mit dem USB-Inhalt synchronisiert.

Es ist kostenlos!


quelle
Vielen Dank; Aber mein Problem ist nicht die Kopie selbst (es ist nur ein Bündel von Dateien, die sich in einem Verzeichnis befinden), sondern dass diese Kopie zum richtigen Zeitpunkt erstellt wird. Eine geplante Aufgabe ist nett, aber nicht ganz das, wonach ich gesucht habe.
Daphshez
0

Das ist ein alter Thread, aber ich dachte, ich würde das hier für jeden machen, der es will. Passen Sie die relevanten Informationen an Ihre Bedürfnisse an, dann erledigt es alles für Sie. Wir danken https://superuser.com/users/232313/tyler , der die erste Iteration durchgeführt hat.

@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
quelle