1 votes

Robocopy : copier des fichiers sans leur structure de répertoire

J'ai un partage de fichiers réseau appelé \\SMWEB\MSDS qui contient des centaines de sous-répertoires nommés MSDS_nnnn_ (c'est-à-dire MSDS plus un nombre). À l'intérieur de chaque sous-répertoire, il peut y avoir de nombreux fichiers - certains fichiers .html, .jpg et divers fichiers .pdf. Il peut également y avoir un sous-répertoire appelé _vti_cnf, qui contient de vieilles extensions FrontPage associées aux métadonnées. Mais il devrait toujours y avoir au moins un fichier à l'intérieur de ces sous-répertoires avec le format de nom MSDS_#_.PDF. (Le nombre peut être de longueurs variables ; par exemple, MSDS99.PDF ou MSDS1099.PDF, etc.)

Il peut également y avoir de vieilles versions obsolètes de ces fichiers auxquelles le propriétaire a ajouté un X_#__ devant le nom du fichier (voir le cadre rouge dans l'image - il y a deux versions archivées du fichier MSDS0001.PDF dans cet exemple).

Voici à quoi ressemble la structure en arborescence :
structure en arborescence, telle que décrite

Voici ce que je dois accomplir : je dois copier tous les fichiers PDF actuels et de premier niveau quelque part (dans un répertoire unique appelé SDS sur mon lecteur H:\). Je ne veux PAS reproduire les sous-dossiers, et je veux uniquement les fichiers avec le motif MSDS*.PDF (ces fichiers sont surlignés en jaune dans l'image ci-dessus). Donc je veux exclure :

  • les fichiers dans les sous-répertoires sous les répertoires MSDS_nnnn_ (par exemple, dans les sous-répertoires _vti_cnf),
  • les fichiers dont les noms ne commencent pas par MSDS (par exemple, les fichiers X_#__), et
  • les fichiers dont les noms ne se terminent pas par .PDF (par exemple, les fichiers HTML et JPEG).

J'ai essayé la commande suivante dans Robocopy :

robocopy \\smweb\msds\ H:\SDS msds*.pdf /S /R:3 /W:3 /NDL /XJD /XD _vti_cnf

Le problème est que Robocopy a reproduit la structure des dossiers sur mon lecteur H:.

Comment puis-je atteindre mon objectif ?

2voto

wobbler Points 15

Avez-vous envisagé d'utiliser un outil de copie de fichiers différent ? Robocopy ne prend pas en charge cela par défaut. Voici un lien qui traite exactement de ce sujet :

https://stackoverflow.com/questions/8690245/robocopy-copy-folders-content-to-a-single-folder

Vous pouvez également essayer quelque chose de simple comme ceci

for /r \\SMWEB\MSDS %f in (MSDS*.pdf) do @copy "%f" H:\MSDS

0voto

gpence Points 111

En fin de compte, j'ai adopté une approche en deux étapes.

Tout d'abord, j'ai exécuté la commande Robocopy qui a copié tous les fichiers et la structure d'arborescence vers un répertoire temporaire appelé SDS1, mais elle a exclu les sous-dossiers "_vti_cnf" avec les métadonnées superflues :

robocopy \\smweb\msds\ \\smf4\HOME\gpence-home\SDS1 msds*.pdf /S /R:3 /W:3 /NDL /XJD /XD _vti_cnf

Ensuite, j'ai exécuté un script PowerShell qui a supprimé les sous-dossiers dans l'arborescence en copiant les fichiers vers un autre répertoire appelé SDS2. (Le paramètre -WhatIf vous montre les résultats sans exécuter réellement la commande. Il vous suffit de supprimer ce paramètre lorsque vous êtes prêt à exécuter la commande "pour de vrai".)

get-ChildItem -Path "\\smf4\HOME\gpence-home\SDS1\msds*.pdf" -Recurse | Copy-Item -Destination "\\smf4\HOME\gpence-home\SDS2" -WhatIf

Cela a bien fonctionné pour moi.

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