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.
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é :)
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
.
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
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 :)
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
Cliquez sur Appliquer.
Maintenant, branchez votre clé USB.
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)
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
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.
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)
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
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!
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
)
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!