Usando o robocopy e excluindo vários diretórios

53

Estou tentando copiar alguns diretórios de um servidor antes de restaurar a partir do backup (meu backup mais recente estava corrompido, por isso preciso usar um mais antigo :(). Estou no ambiente de recuperação do Windows e tenho acesso a o sistema de arquivos do servidor G:\ e minha mídia de backup C:\ Mas, como estou mais familiarizado com o Linux, estou tendo um pouco de dificuldade com a linha de comando no Windows, especificamente robocopy .

Eu quero copiar vários diretórios (mantendo a mesma estrutura de diretório) de G: \ para C: \, excluindo outros (ou seja, as pastas Windows e Arquivos de Programas). Não consigo descobrir a sintaxe da opção /XD . Eu estava esperando fazer algo como:

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

OBSERVAÇÃO: Quero esclarecer que desejo copiar os arquivos reais, mantendo a estrutura de diretórios também. Acabei de verificar e /create apenas cria arquivos vazios. Estranho.

    
por GorrillaMcD 01.10.2012 / 23:32

4 respostas

81

Eu descobri com uma pequena tentativa e erro e o /L (para testar o comando antes de fazer isso de verdade). O comando que eu acabo com é:

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

Aparentemente, incluir barras à direita impede que o robocopy analise a lista de diretórios corretamente, portanto, certifique-se de não incluir barras finais nos nomes de diretório e lembre-se de colocar aspas nos diretórios com espaços no nome.

A opção /MIR mantém a mesma estrutura de diretórios ao copiar os arquivos.

Editar: Depois de mais algumas pesquisas, eu melhorei o comando um pouco:

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

As adições são as seguintes:

  • /Z permite que o trabalho seja reiniciado
  • /LOG:<logfile path> é bastante autoexplicativo.
  • /XF está sendo usado para excluir certos tipos de arquivos, por isso não demora muito
por 02.10.2012 / 00:13
4

Eu sei que isso não responde à pergunta do OP, mas para qualquer um aqui do google: o XD falhará em um arquivo de trabalho se você usar aspas.

Ruim:

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

Bom:

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

Coloque quantas exclusões desejar, linha após linha, sem usar aspas (se houver espaços ou não).

A maneira que eu descobri isso foi usando a opção de linha de comando / SAVE: myjobname que retirou as citações dos diretórios citados!

    
por 07.04.2016 / 21:59
3

você precisa repetir a /XD part

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"
    
por 22.10.2017 / 12:08
1

Minha solução para isso foi criar arquivos .txt que contenham os arquivos ou diretórios que desejo incluir ou excluir. Eu tenho esses arquivos em uma subpasta "rcXcludes" na minha pasta "Backup". Meu método para nomear os arquivos é o seguinte. Prefácio-los com "rc" (por robocopy), em seguida, alguma notação reconhecível para o aplicativo ou parte do sistema de arquivos no comando robocopy, em seguida, acrescentar "B" ou "R" (para backup ou restauração), então "eu" ou "X" (para Incluir ou Excluir), depois "D" ou "F" (para Diretório ou Arquivo). Eu cerco cada entrada com aspas duplas e um espaço entre as entradas. Um arquivo "Incluir" pode ter arquivos ou diretórios, mas os diretórios devem ter uma barra invertida à direita. Em um arquivo "Excluir" para diretórios, você não usa uma barra invertida no final. Qualquer entrada de diretório é relativa ao caminho de origem no comando robocopy. Todo o conteúdo de qualquer um desses arquivos .txt deve estar em uma linha e não ter um feed de linha de retorno de carraige. No meu arquivo em lotes, eu uso um comando SET / P para importar o arquivo .txt em uma variável. Eu então uso essas variáveis para FILES ou depois de / XF ou / XD. Por exemplo, para fazer backup do perfil do Chrome do usuário atual sem copiar toda a pasta "Padrão", uso o seguinte.

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"

No arquivo bat em, 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"
    
por 18.03.2018 / 06:36