Usando robocopy e excluindo vários diretórios

61

Estou tentando copiar alguns diretórios de um servidor antes de restaurar do backup (meu backup mais recente estava corrompido, portanto, tenho que usar um antigo :(). Estou no Windows Recovery Environment e tenho acesso ao arquivo do servidor sistema G:\e minha mídia de backup C:\, mas, como estou mais familiarizado com o Linux, estou tendo alguns problemas com a linha de comando no Windows, especificamente robocopy.

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

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

NOTA: Quero esclarecer que desejo copiar os arquivos reais, mantendo também a estrutura de diretórios. Acabei de verificar e /createsó cria arquivos vazios. Esquisito.

GorrillaMcD
fonte

Respostas:

91

Eu descobri isso com um pouco de tentativa e erro e o /L(para testar o comando antes de fazê-lo de verdade). O comando que eu finalizo é:

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

Aparentemente, a inclusão de barras à direita evita que a robocopy analise a lista de diretórios corretamente, portanto, não inclua barras nos nomes dos diretórios e lembre-se de colocar aspas nos diretórios com espaços no nome.

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

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

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 auto-explicativo.
  • /XF está sendo usado para excluir certos tipos de arquivos para que não demore tanto
GorrillaMcD
fonte
11
Você sempre pode usar a /?opção para obter informações de ajuda para os comandos do console do Windows. Há também o helpcomando, que é semelhante ao manprograma do Linux , mas eu não o vi usado por programas de terceiros (poderia ser - eu não estou familiarizado com como ele funciona, ou se isso é possível).
Ben Richards
Hey, obrigado pelo comentário. Eu pensei que havia um helpcomando, mas ele não parece estar ativo no Ambiente de Recuperação do Windows (recebi um erro como "Nenhum comando 'ajuda' encontrado"). Robocopy é um comando padrão do Windows que substituiu o xcopy e não é de terceiros.
precisa
11
Eu sei que é um comando do Windows e não de terceiros. Acabei de colocar isso lá apenas para referência futura, já que você disse que não está tão familiarizado com o ambiente de comando do Windows. :)
Ben Richards
2
esclarecimento: /MIR(Espelho A a B) destrói todos os arquivos em B que não estão presentes em A. Isso é útil quando o diretório para o qual você está copiando já existe e você deseja que a nova versão (de B) seja uma duplicata exata de A (como existe atualmente).
21918 SherleyHohman
4

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

Ruim:

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

Boa:

::
:: 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 há espaços ou não).

A maneira como descobri isso foi usando a opção de linha de comando / SAVE: myjobname, que retirou as aspas dos meus diretórios citados!

Chris
fonte
4

você tem que repetir a /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
fonte
1

Minha solução para isso foi criar arquivos .txt que contenham os arquivos ou diretórios que quero incluir ou excluir. Eu tenho esses arquivos em uma subpasta "rcXcludes" na minha pasta "Backup". Meu método para nomear os arquivos é o seguinte. Eu os prefácio com "rc" (para robocopy), depois alguma notação reconhecível para o aplicativo ou parte do sistema de arquivos no comando robocopy, depois anexo "B" ou "R" (para backup ou restauração) e depois "I" ou "X" (para incluir ou excluir), depois "D" ou "F" (para diretório ou arquivo). Eu envolvo 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 à direita. Quaisquer entradas de diretório são relativas ao caminho de origem no comando robocopy. Todo o conteúdo de qualquer um desses arquivos .txt deve estar em uma linha enão possui um avanço de linha de retorno carraige. No meu arquivo em lotes, eu uso um comando SET / P para importar o arquivo .txt para 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", use 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"
Charlie C
fonte