J’ai récemment creusé deux outils mis à disposition gratuitement par Microsoft : RichCopy (http://technet.microsoft.com/en-us/magazine/2009.04.utilityspotlight.aspx?pr=blog) et Robocopy (http://en.wikipedia.org/wiki/Robocopy).
Ces deux logiciels remplacent la commande DOS « copy » ou « xcopy » mais en lui ajoutant des fonctionnalités dont la résistance aux erreurs de copie et l’intelligence de ne copier que les fichiers différents entre la source et la destination. Enfin, la vitesse de copie est sans commune mesure avec les outils de copie native de Windows (8 fois plus rapide selon la documentation de RichCopy).
RichCopy est annoncé comme étant le plus rapide des deux. En tout cas, il dispose d’une interface graphique claire permettant une prise en main rapide.
Toutefois, Robocopy (qui est installé d’office sous Windows Vista, Windows 2008 et disponible en téléchargement gratuit pour Windows XP et Windows 2003 - http://technet.microsoft.com/fr-fr/magazine/2006.11.utilityspotlight.aspx) mérite largement que se penche sur sa ligne de commande. L’interface graphique disponible sur technet.microsoft.com ne présente qu’un intérêt ; celui d’installer Robocopy simplement.
Certes, Robocopy est un peu plus ardu à appréhender en raison de la richesse de sa ligne de commande. Toutefois, une fois que l’on a fait l’effort d’en assimiler le fonctionnement, il est l’outil le plus rapide à mettre en œuvre pour recopier de façon fiable un gros volume de données entre PC.
Exemple d'utilisation
Robocopy dispose d’un très grand nombre d’options toutes clairement documentées.
Admettons que vous vouliez copier le répertoire "Mes photos" dont le chemin complet est "C:Documents and settings[votre nom d'utilisateur]Mes documentsMes photos" dans un dossier "Sauvegarde" se trouvant à la racine d'un lecteur M:.
Tapez la syntaxe qui va se présenter sous cette forme :
robocopy "C:Documents and settings[votre nom d'utilisateur]Mes documentsMes photos" M:SAUVEG~1 /E /SEC
où /E copie tous les sous répertoires (même vides) et /SEC copie les securités ACL / NTFS (source et destination NTFS)
Après la première sauvegarde ne seront copiés que les dossiers et fichiers modifiés sans supprimer ceux qui auront été effacés de la source. Pour supprimer de la sauvegarde ces dossiers et fichiers qui n'existent plus dans la source, il faudra rajouter /PURGE à la commande. La destination sera ainsi identique à la source.
Les originalités du produit
Il existe toutefois quelques options bien pratique que je vais détailler ci-dessous.
Archivage par années
Il est possible de ne copier que les fichiers crées ou accédé entre telle et telle date.
| /MAXAGE:n | Excludes files with a Last Modified Date older than n days or specified date. If n is less than 1900, then n is expressed in days. Otherwise, n is a date expressed as YYYYMMDD. |
| /MINAGE:n | Excludes files with a Last Modified Date newer than n days or specified date. If n is less than 1900, then n is expressed in days. Otherwise, n is a date expressed as YYYYMMDD. |
| /MAXLAD:n | Excludes files with a Last Access Date older than n days or specified date. If n is less than 1900, then n is expressed in days. Otherwise, n is a date expressed as YYYYMMDD. |
| /MINLAD:n | Excludes files with a Last Access Date newer than n days or specified date. If n is less than 1900, then n is expressed in days. Otherwise, n is a date expressed as YYYYMMDD. |
Prenons un exemple pratique tiré de http://uksbsguy.com/blogs/doverton/archive/2009/05/06/how-to-copy-or-archive-files-by-year-using-the-command-line-and-robocopy.aspx.
Voici comment utiliser Robocopy pour copier tous les documents Word (.doc et .docx pour Office 2007) du serveur 1 vers le serveur2 mais en les triant par date de création. Les fichiers crées en 2003 seront dans \serveur2destination2003...... La structure des répertoires source est respectée.
for /L %x in (2009,-1,2000) do robocopy \serveur1source \serveur2destination%x *.doc? /minage:%x0101 /maxage:%x1231 /s
Suppression des fichiers inutilisés
Maintenant, un autre exemple. On souhaite retirer de source les fichiers non utilisés depuis plus de 30 jours. Dans un premier temps, ces fichiers sont déplacés dans un répertoire temporaire. S’ils n’ont pas été réclamés dans les 30 jours sont alors définitivement supprimés.
robocopy \serveur1source c:temporaire /S /MOV /COPYALL /MINLAD:30 /R:10 /W:10 /LOG:robocopylog1.txt /ETA /TS /FP /NP /TEE
robocopy c:temporaire c:delete /S /MOVE /COPYALL /MINLAD:60 /R:10 /W:10 /LOG:robocopylog2.txt /ETA /TS /FP /NP /TEE
del c:delete /F /S /Q
Comme, je le disais plus tôt, Robocopy ne transfère que ce qui est strictement nécessaire. Si un fichier n’a pas été modifié depuis la dernière copie, il ne sera pas recopié à nouveau de c:source vers c:destination.
Synchronisation en temps réel
Une dernière fonctionnalité innovante de Robocopy est la possibilité de surveiller les changements dans le répertoire c:source.
Au lieu s’exécuter une fois, Robocopy reste tout le temps actif. Toutes les « n » minutes, il scrute le contenu de c:source et, si au moins « m » fichiers y ont été modifiés/ajoutés, alors il lance la copie de ces fichiers. Dès cette opération terminée, Robocopy repasse en mode « surveillance ». Ainsi, c:source et c:destination sont synchronisés quasiment en temps réel.
Robocopy /MIR /MON :m /MOT :n c:source c:destination
SynerGeek.fr Informatique & Veille Technologique
