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


18

Je recherche une solution pour copier tous les fichiers d'un répertoire spécifique sur le disque dur, vers un répertoire spécifique sur un périphérique mémoire USB, une fois ce périphérique connecté.

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

J'aimerais 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 à la fois des machines Windows XP et Linux, donc une solution pour l'une d'entre elles fonctionnera pour moi.


2
Je suppose que vous n'êtes pas satisfait d'une synchronisation planifiée?
Ivo Flipse

Réponses:


23

Vous pouvez assez 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 bat sur votre lecteur mp3 et créez un autorun.inf en suivant ces instructions

Maintenant, vous devriez avoir votre propre solution maison à votre problème, mais il est certainement possible qu'il existe des solutions prédéfinies :)


astuce génial !!!! +10
in.spite

1
Merci pour la suggestion. Le fichier autorun.inf doit être: [autorun] open = getpodcasts.bat action = copier les podcasts vers le lecteur Au moins winxp sp2, cela n'ouvrira que l'AutoPlayer, avec les nouveaux "copier les podcasts vers le lecteur" en haut. Je ne pense pas qu'il existe un moyen de contourner cela et de le forcer à exécuter le script en silence. De toute évidence, vous devez également activer la lecture automatique. Avoir la commande dont j'ai besoin sur la fenêtre est en fait un grand avantage, mais ce n'est toujours pas exactement ce que je cherchais.
daphshez

belle réflexion! :) +1

3
Microsoft n'a-t-il pas simplement supprimé la possibilité d'utiliser l'exécution automatique sur une clé USB?
ale

10

Pour Linux:

Si cela ne vous dérange pas un peu de script Python, vous pouvez écrire un démon qui écoute HAL pour les événements, puis lance un script une fois qu'un périphérique de votre choix a été 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 __name__ == '__main__':
    m = DeviceManager()

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

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

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

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


Je ne peux pas vérifier si c'est une bonne réponse, mais vous méritez un vote positif pour le problème seul! Quoi qu'il en soit, j'essaierais de rendre cela un peu plus facile pour les non-programmeurs ici ;-) comme moi!
Ivo Flipse

9

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

Téléchargez SyncToy et établissez l'appariement de vos dossiers et le nom de la synchronisation ("SyncTest")

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

  • Exécutez la console de gestion de l'ordinateur
  • Observateur d'événements / journaux Windows / système
  • Trouver l'événement d'insertion de médias
    • «Le service Portable Device Enumerator Service est entré dans l'é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 de journal)
  • Dans la fenêtre supérieure de l'événement, faites un clic droit sur l'événement et sélectionnez "Attacher la tâche à cet événement"
  • Windows ouvre "Créer une fenêtre de tâches de base"
  • Donnez un nom à votre tâche et cliquez sur Suivant
  • Les informations sur l'événement sont déjà remplies, à côté
  • L'action doit afficher "Démarrer un programme", ensuite
  • Dans la fenêtre Démarrer un programme, accédez à SyncToyCmd.exe (ou à l'application de synchronisation que vous avez choisie)
  • Ajoutez des arguments. Si votre couplage de sauvegarde s'appelle SyncTest, entrez "-RsyncTest". N'ajoutez pas de guillemets, n'ajoutez pas d'espace après la ligne de commande -R, SyncToy (ou peut-être Windows 7) est sensible à la casse, donc SyncTest n'est pas égal à 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 j'ai eu était de faire fonctionner mon ordinateur portable sur piles, dans le Gestionnaire des tâches sous l'onglet conditions, décochez "Démarrer la tâche uniquement si l'ordinateur est alimenté en courant alternatif", sinon la tâche ne fonctionnera que lorsque le courant alternatif est branché.

De plus, comme les interrogations USB et les déconnexions / reconnexions, cette tâche s'exécutera toutes les deux minutes, en fait un peu cool, elle se synchronise automatiquement sur le disque dur USB tout le temps :)


2

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) en utilisant TweakUI

  • Ouvrez TweakUI
  • Accédez à mon ordinateur -> autorun–> gestionnaires
  • Cliquez sur créer
  • Rechercher l'emplacement de Synctoy (fichiers de programme par défaut)
  • Double-cliquez sur le logo du lanceur de programme
  • Sélectionnez tous les boutons radio multimédias dans la liste ci-dessous.
  • Cliquez sur OK
  • Cliquez sur appliquer.

  • Branchez maintenant votre clé USB.

  • Sur mon ordinateur, cliquez avec le bouton droit sur le lecteur et sélectionnez les propriétés.
  • Cliquez sur l'onglet de lecture automatique
  • Sélectionnez la musique dans le menu déroulant.
  • Cliquez sur le bouton radio "sélectionner l'action à effectuer"
  • Sélectionnez maintenant la synchronisation avec le logo SyncToy
  • Répétez l'opération pour les autres options proposées par le menu déroulant
  • Cliquez sur Appliquer puis sur OK.
  • Retirez et réinsérez votre disque pour voir s'il a fonctionné

Je n'arrive pas à trouver de (autre) programme qui démarre automatiquement lorsque vous connectez votre périphérique USB.

Ils dépendent tous de la planification pour démarrer 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 fonctionnera si c'est le cas.

Mais trop honnêtement, il serait plus facile si vous cliquez simplement 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 qui fonctionne à la fois sur Linux et Windows: DirSync Pro qui est entièrement gratuit, fonctionne sur Java et a une belle interface graphique:

*  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
vous pouvez éventuellement combiner cela avec une tâche planifiée qui utilise les nouveaux événements de déclenchement dans Vista et Windows 7 pour l'exécuter lorsqu'un périphérique USB est connecté.
Paxxi

1
Je pense que la solution d'exécution automatique mentionnée dans l'autre réponse pourrait faire l'affaire
Ivo Flipse

Tout comme une note, je crois que les fonctionnalités "sur insert" sont nouvelles pour SyncBack SE 5.
daphshez

1

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 fouillé un peu et j'ai 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'abord d'effacer le journal (juste pour faciliter la recherche de l'événement souhaité), puis insérez la clé USB. Actualisez le journal et un tas d'événements devrait apparaître. J'ai choisi l'événement le plus haut (c'est-à-dire le plus récent) et j'ai assigné la tâche à cela (assurez-vous que la description de l'événement ressemble à quelque chose de spécifique au lecteur USB particulier que vous avez inséré).

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


1

J'utilise juste un AUTORUN.INF avec quelques lots pour synchroniser les dossiers clés. Très simple très efficace.

En outre, si vous disposez d'un fichier autorun.inf archivé en lecture seule, son virus de clé USB de contrat dur est


1

Vous êtes simplement en train d'oublier ""et de terminer ".\dectory\" ← Cette fin \aussi.

La formule de traitement par lots d'origine fonctionne, il n'y a que quelques jours, il y a beaucoup d'espaces dans les répertoires, les fichiers de commandes et l'invite de commande les déteste.

À quoi ressemble la mienne:

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

1

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

D'ailleurs, 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, ou votre musique si un lecteur MP3 de stockage de masse USB est inséré, ou vos livres lorsque vous y branchez un Kindle.


1

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 qui était téléchargé par une caméra IP. J'ai donc é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é, son nommé sda1 (un autre lecteur sera sdb1, donc cela ne fonctionnera pas)


0

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

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

Installez-le selon un horaire nocturne. Si le lecteur USB est branché, il synchronisera le dossier de téléchargement avec le contenu USB.

C'est gratuit!


Merci; mais mon problème n'est pas la copie elle-même (c'est juste un tas de fichiers résidant dans un répertoire), mais faire en sorte que cette copie se produise au bon moment. Une tâche planifiée est agréable, mais pas tout à fait ce que je cherchais.
daphshez

0

Ceci est un vieux fil, mais je pensais que je pourrais le faire ici pour tous ceux qui le veulent. Modifiez les informations pertinentes en fonction de vos besoins, il fera tout pour vous. Nous remercions /superuser//users/232313/tyler qui en a fait la première ité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
)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.