Usando robocopy y excluyendo múltiples directorios

60

Estoy tratando de copiar algunos directorios de un servidor antes de restaurar desde la copia de seguridad (mi última copia de seguridad estaba dañada, así que tengo que usar una anterior :(). Estoy en el Entorno de recuperación de Windows y tengo acceso al archivo del servidor sistema G:\y mis medios de respaldo C:\, pero como estoy más familiarizado con Linux, tengo algunos problemas con la línea de comandos en Windows, específicamente robocopy.

Quiero copiar varios directorios (manteniendo la misma estructura de directorios) de G: \ a C: \ mientras excluyo otros (es decir, las carpetas de Windows y Archivos de programa). No puedo entender la sintaxis de la /XDopción. Esperaba hacer algo como:

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

NOTA: Quiero aclarar que quiero copiar los archivos reales manteniendo la estructura del directorio también. Acabo de comprobar y /createsolo crea archivos vacíos. Extraño.

GorrillaMcD
fuente

Respuestas:

92

Lo descubrí con un poco de prueba y error y el /L(para probar el comando antes de hacerlo de verdad). El comando con el que termino es:

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

Aparentemente, incluir barras diagonales finales evita que robocopy analice la lista de directorios correctamente, así que asegúrese de no incluir barras diagonales finales en los nombres de directorio y recuerde poner comillas alrededor de directorios con espacios en el nombre.

La /MIRopción mantiene la misma estructura de directorio al copiar los archivos.

Editar: Después de un poco más de investigación, mejoré un poco el comando:

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

Las adiciones son las siguientes:

  • /Z permite reiniciar el trabajo
  • /LOG:<logfile path> Es bastante autoexplicativo.
  • /XF se utiliza para excluir ciertos tipos de archivos para que no tarde tanto
GorrillaMcD
fuente
1
Siempre puede usar el /?interruptor para obtener información de ayuda para los comandos de la consola de Windows. También está el helpcomando, que es similar al manprograma de Linux , pero no lo he visto utilizado por programas de terceros (podría ser, no estoy familiarizado con cómo funciona, o si eso es posible).
Ben Richards
Hey, gracias por el comentario. Pensé que había un helpcomando, pero no parece estar activo en el Entorno de recuperación de Windows (recibí un error como "No se encontró el comando 'ayuda'"). Robocopy es un comando predeterminado de Windows que reemplazó a xcopy y no es de terceros.
GorrillaMcD
1
Sé que es un comando de Windows y no un tercero. Acabo de poner eso allí solo por referencia futura, ya que dijiste que no estás tan familiarizado con el entorno de comandos de Windows. :)
Ben Richards
2
aclaración: /MIR(Mirror A to B) destruye cualquier archivo en B que no esté presente en A. Esto es útil cuando el directorio al que está copiando ya existe, y desea que la nueva versión (de B) sea un duplicado exacto de A (tal como existe actualmente).
SherylHohman
4

Sé que esto no responde la pregunta de OP, pero para cualquier persona aquí de google: XD fallará en un archivo de trabajo si usa comillas.

Malo:

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

Bueno:

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

Coloque tantas exclusiones como desee, línea tras línea, sin usar comillas (ya sea que haya espacios o no).

La forma en que descubrí esto fue mediante el uso del modificador de línea de comando / SAVE: myjobname que eliminó las comillas de mis directorios citados.

Chris
fuente
4

tienes que repetir la /XDparte

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"
weberjn
fuente
1

Mi solución para esto fue crear archivos .txt que contienen los archivos o directorios que quiero incluir o excluir. Tengo estos archivos en una subcarpeta "rcXcludes" en mi carpeta "Copia de seguridad". Mi método para nombrar los archivos es el siguiente. Los presento con "rc" (para robocopy), luego alguna notación reconocible para la aplicación o parte del sistema de archivos en el comando robocopy, luego agrego "B" o "R" (para Backup o Restore), luego "I" o "X" (para Incluir o Excluir), luego "D" o "F" (para Directorio o Archivo). Rodeo cada entrada con comillas dobles y un espacio entre las entradas. Un archivo "Incluir" puede tener archivos o directorios, pero los directorios deben tener una barra diagonal inversa. En un archivo "Excluir" para directorios no utiliza una barra diagonal inversa. Cualquier entrada de directorio es relativa a la ruta de origen en el comando robocopy. El contenido completo de cualquiera de estos archivos .txt debe estar en una línea yNo tener una línea de retorno de carraige. En mi archivo por lotes, uso un comando SET / P para importar el archivo .txt a una variable. Luego uso estas variables para ARCHIVOS o después de / XF o / XD. Por ejemplo, para hacer una copia de seguridad del perfil de Chrome del usuario actual sin copiar toda la carpeta "Predeterminada", utilizo lo siguiente.

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"

En el archivo bat en, digamos, 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"
Charlie C
fuente