82 votes

Utilisation de robocopy et exclusion de plusieurs répertoires

J'essaie de copier quelques répertoires d'un serveur avant de le restaurer à partir d'une sauvegarde (ma dernière sauvegarde était corrompue, je dois donc en utiliser une plus ancienne :( ). Je suis dans l'environnement de restauration Windows et j'ai accès au système de fichiers du serveur. G:\ et mon support de sauvegarde C:\ . Mais, étant donné que je suis plus familier avec Linux, j'ai un peu de mal avec la ligne de commande dans Windows, notamment robocopy .

Je souhaite copier plusieurs répertoires (en conservant la même structure de répertoires) de G:\ à C:\ tout en excluant certains autres (à savoir, les dossiers Windows et Program Files). Je n'arrive pas à trouver la syntaxe de la commande /XD option. J'espérais faire quelque chose comme :

robocopy G: C:\backup /CREATE /XD "dir1","dir2", ...

NOTE : Je tiens à préciser que je veux copier les fichiers réels tout en conservant la structure du répertoire. Je viens de vérifier, et /create ne crée que des fichiers vides. Bizarre.

127voto

TheSciz Points 121

Je l'ai compris avec un peu d'essais et d'erreurs et les /L (pour tester la commande avant de la faire pour de vrai). La commande que j'obtiens est la suivante :

robocopy G: C:\backup /MIR /XD G:\dir1 "G:\dir 2" G:\dir3 ...

Apparemment, l'inclusion de slashs de fin de ligne empêche robocopy d'analyser correctement la liste des répertoires. Veillez donc à ne pas inclure de slashs de fin de ligne dans les noms de répertoires et n'oubliez pas de mettre des guillemets autour des répertoires dont le nom contient des espaces.

El /MIR L'option maintient la même structure de répertoire pendant la copie des fichiers.

Edit : Après quelques recherches supplémentaires, j'ai amélioré un peu la commande :

robocopy G: C:\backup /MIR /Z /LOG:C:\todaysdate-backup.log /XF *.iso *.log *.au /XD G:\dir1 ...

Les ajouts sont les suivants :

  • /Z permet de redémarrer le travail
  • /LOG:<logfile path> est assez explicite.
  • /XF est utilisé pour exclure certains types de fichiers afin que cela ne prenne pas trop de temps.

7voto

Code Friendly Points 3069

Je sais que cela ne répond pas à la question de l'OP, mais pour tous ceux qui viennent de Google : XD échouera dans un fichier de travail si vous utilisez des guillemets.

Mauvais :

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        "Temporary Internet Files"

Bien :

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        Temporary Internet Files

Placez autant d'exclusions que vous le souhaitez, ligne après ligne, sans utiliser de guillemets (qu'il y ait des espaces ou non).

J'ai découvert cela en utilisant le commutateur de ligne de commande /SAVE:myjobname qui a enlevé les guillemets de mes répertoires cités !

7voto

weberjn Points 421

Vous devez répéter le /XD partie

C:\>robocopy "C:\Users\weberjn\Google Drive" "u:\Google Drive" /e /dcopy:t /copy:DT /r:0 /XD "C:\Users\weberjn\Google Drive\photos" /XD "C:\Users\weberjn\Google Drive\Google Photos"

3voto

Charlie C Points 21

Ma solution consiste à créer des fichiers .txt contenant les fichiers ou les répertoires que je souhaite inclure ou exclure. Ces fichiers se trouvent dans un sous-dossier "rcXcludes" dans mon dossier "Backup". Ma méthode pour nommer les fichiers est la suivante. Je les fais précéder de "rc" (pour robocopy), puis d'une notation reconnaissable pour l'application ou la partie du système de fichiers dans la commande robocopy, puis j'ajoute "B" ou "R" (pour Backup ou Restore), puis "I" ou "X" (pour Include ou Exclude), puis "D" ou "F" (pour Directory ou File). J'entoure chaque entrée de guillemets doubles et d'un espace entre les entrées. Un fichier "Include" peut contenir des fichiers ou des répertoires, mais les répertoires doivent avoir une barre oblique inverse à la fin. Dans un fichier "Exclude" pour les répertoires, vous n'utilisez pas de barre oblique inverse de fin. Toutes les entrées de répertoire sont relatives au chemin source de la commande robocopy. L'intégralité du contenu de ces fichiers .txt doit figurer sur une seule ligne. no ont une alimentation de la ligne de retour de carraige. Dans mon fichier batch, j'utilise une commande SET /P pour importer le fichier .txt dans une variable. J'utilise ensuite ces variables pour les FILES ou après /XF ou /XD. Par exemple, pour sauvegarder le profil Chrome de l'utilisateur actuel sans copier tout le dossier "Default", j'utilise ce qui suit.

rcChromeBIF.txt  
"Bookmarks" "Custom Dictionary.txt" "Extension Cookies" "Favicons" "History" "Login Data" "Preferences" "Top Sites" "Visited Links" "Web Data" "Databases\" "Extensions\" "Local Storage\" "Plugin Data\" "User Scripts\" "User StyleSheets\"

rcChromeBXF.txt  
"Bookmarks.bak" "ChromeDWriteFontCache" "Cookies" "Cookies-journal" "Current Session" "Current Tabs" "Extension Cookies-journal" "Favicons-journal" "Google Profile.ico" "History Provider Cache" "History-journal" "Last Session" "Last Tabs" "Login Data-journal" "Network Action Predictor" "Network Action Predictor-journal" "Network Persistent State" "Origin Bound Certs" "Origin Bound Certs-journal" "QuotaManager" "QuotaManager-journal" "README" "Secure Preferences" "Shortcuts" "Shortcuts-journal" "Top Sites-journal" "TransportSecurity" "Web Data-journal"

rcChromeBXD.txt  
"Application Cache" "Cache" "data_reduction_proxy_leveldb" "Extension State" "File System" "GPUCache" "IndexedDB" "JumpListIcons" "JumpListIconsOld" "Local Extension Settings" "Media Cache" "Pepper Data" "Platform Notifications" "Service Worker" "Session Storage" "Storage" "Thumbnails" "Web Applications"

Dans le fichier bat en, dis, C:\Backup.

REM ChromeBak.bat
SET chromeprofdir=Google\Chrome\User Data\Default
SET /P rcChrmBIF=<C:\Backup\rcXcludes\rcChromeBIF.txt
SET /P rcChrmBXF=<C:\Backup\rcXcludes\rcChromeBXF.txt
SET /P rcChrmBXD=<C:\Backup\rcXcludes\rcChromeBXD.txt
robocopy "%LOCALAPPDATA%\%chromeprofdir%" "H:\ChromeBackup\%chromeprofdir%" %rcChrmBIF% /E /ZB /COPY:DAT /DCOPY:T /MT:4 /XJ /XF %rcChrmBXF% /XD %rcChrmBXD% /R:10 /W:2 /TBD /NP /V /TS /Log+:"H:\ChromeBackup\ChromeBackup.log"

1voto

Adehad Points 111

Il s'agit d'une réponse adaptée sur quelque chose de repris par Réponse de Fara Importanta sur ServerFault y Le guide ultime de Robocopy

Il découle de La réponse de Charlie C sur l'utilisation d'un fichier pour stocker les exclusions / inclusions. Cependant, au lieu de cela, nous nous appuyons sur le /JOB interrupteur.

Prenons cet exemple de liste d'exclusions stockée dans le fichier suivant

exclure.rcj

/XF
    *.pyc
    *.pyo
    *.pyd

/XD
    __pycache__
    .pytest_cache

Notez comment nous sommes capables d'avoir plusieurs interrupteurs dans le fichier et de séparer les noms avec de nouvelles lignes pour une meilleure lisibilité !

Notre lot script peut alors être quelque chose du genre :

backup.bat

SET _backupDir=backup_path\
SET _excl="%_backupDir%exclude.rcj"

robocopy src_path dest_path /JOB:%_excl%

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X