web-dev-qa-db-fra.com

Utiliser robocopy et exclure plusieurs annuaires

J'essaie de copier certains répertoires d'un serveur avant de restaurer à partir d'une sauvegarde (ma dernière sauvegarde était corrompue et je dois donc utiliser un ancien :(). Je suis dans l'environnement de récupération Windows et j'ai accès au fichier du serveur. systemG:\ et mon support de sauvegarde C:\. Mais, comme je suis plus familier avec Linux, j'ai quelques problèmes avec la ligne de commande de Windows, plus précisément robocopy.

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

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

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

55
GorrillaMcD

Je l'ai compris avec un petit essai et une erreur et le /L (pour tester la commande avant de le faire pour de vrai). La commande avec laquelle je me retrouve est:

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

Apparemment, les barres obliques de fin empêchent robocopy d’analyser correctement la liste des répertoires. Veillez donc à ne pas inclure de barres obliques sur les noms de répertoires et veillez à mettre des guillemets autour des répertoires avec des espaces.

L'option /MIR conserve la même structure de répertoires lors de la copie des fichiers.

Edit: Après quelques recherches supplémentaires, j'ai un peu amélioré 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 relancer le travail
  • /LOG:<logfile path> est assez explicite.
  • /XF est utilisé pour exclure certains types de fichiers afin qu'il ne prenne pas si longtemps
85
GorrillaMcD

Je sais que cela ne répond pas à la question de OP, mais à quiconque ici, de Google: XD échouera dans un fichier de travail si vous utilisez des guillemets.

Mal:

::
:: 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 ou non des espaces).

J'ai découvert que c'était en utilisant le commutateur de ligne de commande/SAVE: myjobname qui supprimait les citations de mes répertoires cités!

4
Chris

vous devez répéter la /XDpart

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"
4
weberjn

Ma solution pour cela était de créer des fichiers .txt contenant les fichiers ou les répertoires que je veux inclure ou exclure. J'ai ces fichiers dans un sous-dossier "rcXcludes" sous mon dossier "Backup". Ma méthode pour nommer les fichiers est la suivante. Je les préface avec "rc" (pour robocopy), puis une notation reconnaissable pour l'application ou une partie du système de fichiers dans la commande robocopy, puis j'ajoute "B" ou "R" (pour sauvegarder ou restaurer), puis "I" ou "X" (pour inclure ou exclure), puis "D" ou "F" (pour répertoire ou fichier). J'entoure chaque entrée de guillemets et d'un espace entre les entrées. Un fichier "Include" peut contenir des fichiers ou des répertoires, mais les répertoires doivent comporter une barre oblique inversée. Dans un fichier "Exclure" pour les répertoires, vous n'utilisez pas de barre oblique inverse. Toutes les entrées de répertoire sont relatives au chemin source dans la commande robocopy. Tout le contenu de ces fichiers .txt doit figurer sur une seule ligne et pas avoir un retour à la ligne carraige. Dans mon fichier de commandes, j'utilise une commande SET/P pour importer le fichier .txt dans une variable. J'utilise ensuite ces variables pour FILES ou après/XF ou/XD. Par exemple, pour sauvegarder le profil Chrome de l'utilisateur actuel sans copier l'intégralité du dossier "Par défaut", 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 chauve-souris, disons 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"
1
Charlie C