web-dev-qa-db-fra.com

Comment puis-je copier automatiquement des fichiers sur un lecteur USB lorsque je le connecte à mon ordinateur?

Je cherche une solution pour copier tous les fichiers d'un répertoire spécifique du disque dur vers un répertoire spécifique d'un périphérique de stockage USB, une fois ce périphérique connecté.

J'ai un programme qui télécharge des épisodes de podcast pour moi.

Je souhaite que ces fichiers soient automatiquement déplacés (ou au moins copiés) sur mon lecteur mp3 une fois que je le connecte à l'ordinateur.

J'ai les deux machines Windows XP et Linux, donc une solution pour l'un d'eux fonctionnera pour moi.

17
daphshez

Vous pouvez très facilement créer votre propre solution pour Windows en utilisant autorun.inf et un fichier .bat.

Créez un fichier bat pour copier un répertoire sur votre lecteur usb.

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

Placez le fichier chauve-souris sur votre lecteur mp3 et créez un fichier autorun.inf en utilisant ces instructions

Maintenant, vous devriez avoir votre propre solution maison à votre problème, mais il est certainement possible qu'il existe des solutions préconçues sur le marché :)

23
Paxxi

Pour Linux:

Si cela ne vous dérange pas un peu de script Python, vous pouvez écrire un démon écoutant les événements de HAL, puis lancer un script une fois qu'un périphérique de votre choix est branché. Un exemple de script ressemblerait à ceci :

#!/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 __== '__main__':
    m = DeviceManager()

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

Il vous suffit de modifier la fonction device_added() pour la limiter au périphérique spécifique et remplacer l'appel os.system() par votre script personnalisé.

Pour le limiter au lecteur, la propriété volume.uuid peut être utilisée et une liste complète des propriétés disponibles peut être affichée avec le programme hal-device.

Pour démarrer le démon au démarrage, démarrez-le simplement à partir de /etc/rc.local.

10
Grumbel

Windows 7 et synchronisation automatique sur votre périphérique flash/USB lors de l'insertion!

Téléchargez SyncToy et établissez votre association de dossiers et votre nom de synchronisation ("SyncTest")

voir: Comment: utiliser SyncToy pour créer un miroir nocturne de Mes documents

  • Exécuter la console de gestion de l'ordinateur
  • Observateur d'événements/journaux Windows/système
  • Trouver l'événement d'insertion de média
    • "Le service de service Portable Enumerator Service est entré en état d'exécution." (Vous devrez peut-être effacer votre journal des événements et éjecter/réinsérer votre support pour déclencher cet événement du journal.)
  • Dans la fenêtre supérieure de l'événement, cliquez avec le bouton droit de la souris sur l'événement et sélectionnez "Attacher une tâche à cet événement".
  • Windows ouvert "Créer une fenêtre de tâche de base"
  • Donnez un nom à votre tâche et cliquez sur Suivant
  • Les informations sur l'événement sont déjà renseignées, à la suite
  • L'action doit afficher "Démarrer un programme", à la suite
  • Dans la fenêtre Démarrer un programme, accédez à SyncToyCmd.exe (ou à l’application de synchronisation de votre choix).
  • Ajouter des arguments. Si votre liaison de sauvegarde s'appelle SyncTest, entrez "-RsyncTest". Ne pas ajouter de guillemets, ne pas ajouter d'espace après la -R, la ligne de commande SyncToy (ou peut-être Windows 7) est sensible à la casse, donc SyncTest n'est pas synonyme Synctest!
  • Ensuite, Terminer

Vous pouvez exécuter la tâche directement à partir du planificateur de tâches pour vérifier qu'elle fonctionne. Maintenant, le seul autre problème que je rencontrais était de faire fonctionner mon ordinateur portable sur des batteries. Dans le Gestionnaire des tâches de l'onglet Conditions, décochez la case "Démarrer la tâche uniquement si l'ordinateur est branché sur le secteur", sinon la tâche ne sera exécutée que si le secteur est branché.

En outre, à mesure que l'USB interroge et déconnecte/reconnecte, cette tâche s'exécutera toutes les deux minutes. En fait, elle est plutôt cool. Elle se synchronise automatiquement sur le disque dur USB :)

8
steven Teal

Edit: il s'avère que SyncBack SE a une action de déclenchement:

Ouvrez le profil, allez dans l’onglet "Quand", puis "Insérer". Il vous permet de spécifier par lettre de lecteur, étiquette ou numéro de série.

Cependant, la version SE n'est pas gratuite et Windows uniquement (je pense)

Ou vous pouvez essayer d'ajouter un événement Autorun pour votre programme de synchronisation (exemple pour SyncToy) à l'aide de TweakUI

  • Ouvrez TweakUI
  • Aller à mon ordinateur -> autorun–> gestionnaires
  • Cliquez sur créer
  • Trouver où se trouve Synctoy (fichiers programme par défaut)
  • Double-cliquez sur le logo du programme de lancement
  • Sélectionnez tous les boutons radio multimédia dans la liste ci-dessous.
  • Cliquez sur OK
  • Cliquez sur Appliquer.

  • Maintenant, branchez votre clé USB.

  • Sur mon ordinateur, cliquez avec le bouton droit sur le lecteur et sélectionnez Propriétés.
  • Cliquez sur l'onglet autoplay
  • Sélectionnez la musique dans le menu déroulant.
  • Cliquez sur le bouton radio "sélectionner une action à exécuter"
  • Maintenant, sélectionnez la synchronisation avec le logo SyncToy
  • Répétez l'opération pour les autres options indiquées dans le menu déroulant.
  • Cliquez sur Appliquer puis sur OK.
  • Retirez et réinsérez votre lecteur pour voir si cela a fonctionné

Je n'arrive pas à trouver un (autre) programme qui se lance automatiquement lorsque vous connectez votre périphérique USB.

Ils comptent tous sur la planification pour commencer la synchronisation. Vous pouvez décider de le programmer tous les jours. Il échouera simplement si le périphérique USB n'est pas connecté et si cela fonctionne.

Mais soyez honnête, il vous serait plus facile de cliquer sur le bouton de synchronisation. Vous devez également brancher votre périphérique USB manuellement.

Quoi qu'il en soit, j'ai également trouvé un outil de synchronisation fonctionnant à la fois sous Linux et Windows: DirSync Pro entièrement gratuit, fonctionne sous Java et possède une interface graphique de Nice:

*  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)
2
Ivo Flipse

Je viens d'utiliser un AUTORUN.INF avec quelques lots pour synchroniser les dossiers de clés. Très simple très efficace.

De plus, si vous avez un fichier autorun.inf archivé en lecture seule, archivez le fichier du contrat

1
Lightly Salted

Sous Linux, au lieu d'avoir un programme en cours d'exécution pour écouter les événements, vous pouvez utiliser ceux qui sont déjà en cours d'exécution. Vous pouvez ajouter à udev des points d'ancrage qui montent le périphérique sur un emplacement temporaire, puis lance rsync pour synchroniser de nombreux répertoires.

En passant, vous pouvez définir des actions spécifiques en fonction de la signature de votre appareil: synchronisez vos documents de travail lorsqu'une clé spécifique est insérée, votre musique si un lecteur MP3 à mémoire de grande capacité USB est insérée ou vos livres lorsque vous y branchez un Kindle.

1
Daduke

Lorsque je mettais en place un petit système de surveillance avec Raspberry Pi, qui fonctionnait sur Raspbian Wheezy, je devais constamment déplacer tous les fichiers du dossier FTP chargé par la caméra IP. Donc, j’ai écrit le script dans le répertoire personnel (~) et je l’ai appelé une fois par minute avec cron

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

move_images_to_usb est un script bash ordinaire, je ne faisais pas de script auparavant sur bash, mais ...

#!/bin/bash

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

Lorsque le lecteur USB est inséré, il est nommé sda1 (un autre lecteur sera sdb1, donc il ne fonctionnera pas)

1
57ar7up

Vous oubliez simplement de "" et de terminer ".\dectory\" ← Cette fin \ également.

La formule de traitement par lots d'origine fonctionne. Il ne reste que quelques jours. Il existe de nombreux espaces dans les répertoires, les fichiers de traitement par lots et la commande Prompt HATE.

À quoi ressemble le mien:

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

J'ai essayé la méthode de Steven, mais l'événement USB n'apparaissait pas dans "Observateur d'événements/Journaux Windows/Système" (j'utilise Windows 7). J'ai un peu fouillé et découvert que les événements d'insertion USB se trouvent dans "Observateur d'événements/Journaux des applications et des services/Microsoft/Windows/DriverFrameworks-UserMode/Operational". Essayez d’effacer d’abord le journal (pour faciliter la recherche de l’événement souhaité), puis insérez le lecteur flash USB. Actualisez le journal et de nombreux événements devraient apparaître. J'ai choisi l'événement le plus haut (c'est-à-dire le plus récent) et lui ai attribué la tâche (assurez-vous que la description de l'événement ressemble à quelque chose de spécifique au lecteur USB que vous avez inséré).

J'ai utilisé le programme gratuit SyncBack pour effectuer la synchronisation proprement dite. Fonctionne très bien!

1
GordonM

C'est un vieux fil, mais je pensais que je pourrais le dire ici à quiconque le voudrait. Modifiez les informations pertinentes en fonction de vos besoins pour que tout soit fait pour vous. Nous remercions https://superuser.com/users/232313/tyler qui a effectué la première itération de cette opération.

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

J'utilise un programme de réplication de Karenware. Elle est l'auteur de nombreux petits programmes utiles pour Windows (pensez aux PowerToys des débuts de W98/W2K/XP).

Voici le lien. http://www.karenware.com/powertools/ptreplicator.asp

Installez-le tous les soirs. Si le lecteur USB est branché, le dossier de téléchargement sera synchronisé avec le contenu USB.

C'est gratuit!

0
Steve Kalman