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
Ok je comprends mieux! Bon courage alors…
Quoiqu’il en soit, si c’est un contrat de prestation longue durée et non un one shot, vous pouvez toujours informer/former les utilisateurs aux bonnes pratiques de l’informatique pour l’avenir. Ca fait aussi partie du rôle des SSII.
Il faut aussi penser aux pauvres informaticiens qui se triturent les méninges pour rattraper les erreurs du passé, j’en ai perdu pas mal de cheveux !! 🙂
merci pour le retour..
Nicolas je suis d’accord avec vous.. malheureusement en tant que prestataire de service je retrouve souvent ce genre de soucis ( pauvre de moi ) souvent les clients que ma société récupèrent n’ont pas de service info et 2 fois sur 3 c’est catastrophique…
bref…
sinon robocopy péche.. et mettre un ~ au 6eme caractères n’est pas jouable disons que j’ai une quinzaines de rep racine et 4 à 7 niveau de sous dossier avec tous un problème de longueur et sans compter les fichiers..
@ Stilius: Je pense que c’est aussi le rôle de l’administrateur système d’imposer ou faire comprendre quelques règles aux utilisateurs.
Malgré toutes les évolutions et les efforts d’interopérabilité de la part des développeurs, combien de fois les admins rencontrent des soucis avec les utilisateurs qui mettent des accents dans les noms de fichier ou des noms de fichier trop longs…
@Olivier: et en mettant un ~1 après 6 caractères cela fonctionne ?
Sous DOS, il m’est arrivé (si je me souviens bien) de faire des copy blabla.exe c:progra~1blabla
oui, les version courtes ~1 des noms longs fonctionnent aussi
bonjour
d’abord merci pour votre temps et votre site .. trés enrichissant 🙂
une petite question pour robocopy et richcopy…
je dois migrer des données d’un serveur à l’autre, mais j’ai eu la joie de découvrir des nom de répertoire a ralonge voir plus de 255 carractéres, le style d’user qui raconte leur vie sur le titre des repertoires et y en a beaucoups..
ses softs peuvent ils gerer mon probléme ??
merci bon courage
Le problème de copie des noms longs est apparament résolu depuis la version XP010 de Robocopy.
“Robocopy.exe
Robust File Copy Utility
Version XP010
Copy very long path names (longer that 256 characterfs).
Previous versions of Robocopy would fail to copy any pathname longer than
256 characters. The program has now been enhanced to handle pathnames of any
length, up to the internal Windows limit of nearlt 32,000 characters.”
()