Méthode la plus rapide pour copier des fichiers

15

Si nous avons réussi à construire sur notre serveur de construction (CCNET), tous les fichiers du site Web ASP.NET sont copiés dans le répertoire virtuel (% output_dir%) afin que les non-développeurs puissent voir / tester la dernière version du site Web. À la fin de la construction, le fichier bat suivant est exécuté.

rmdir /s /q "%output_dir%"
mkdir "%output_dir%"
xcopy "%source_dir%*"  "%output_dir%" /e /c /i /q /-y

Le problème est que je trouve la copie lente et je me demandais s'il y avait des commandes de copie disponibles dans Windows 2008 qui sont plus rapides que xcopy? La source et la destination se trouvent sur le même lecteur. Voici les arguments que nous utilisons lors de la copie.

/e = copies directories and sub directories including empty ones.
/c = continues copying even if there are errors
/i = if destination does not exist destination is directory
/q = don't display filenames
/-y = confirm overwrite
dmcgiv
la source

Réponses:

21

Du point de vue des performances uniquement , xcopy ou robocopy vous donneront des résultats similaires. J'ai effectué quelques tests sur une boîte Windows Vista 64 bits SP2 pour faire des comparaisons. Toutes les copies ont été effectuées entre un disque interne SATA II à 7200 tr / min et un lecteur USB 2.0 externe ou sur le même lecteur interne lui-même où indiqué. Aucune configuration spéciale n'a été effectuée (décidez-vous si cela invalide / valide le test), uniquement pour entrer la commande dans un fichier de commandes à exécuter. PowerShell a été utilisé pour capturer les heures de début et de fin. Après quelques passes, voici les moyennes des outils avec lesquels j'ai joué:

Fichier: 732 909 568 octets (698 Mo), 1 fichier ISO copié dans un répertoire différent sur le même disque interne.

copy      6 secs (ex. copy G:\folder1\* G:\folder2\)
xcopy     6 secs (ex. xcopy G:\folder1 G:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ G:\folder2 /E /NP)
teracopy 28 secs (ex. TeraCopy.exe Copy G:\folder1\ G:\folder2\)
fastcopy 19 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=G:\folder2)  

Fichier: 732 909 568 octets (698 Mo), 1 fichier ISO copié sur un disque USB externe.

copy     36 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy    35 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 36 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 36 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 38 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)  

Fichiers: 45 039 616 octets (42,9 Mo) 5 fichiers aléatoires copiés sur un disque USB externe

copy      6 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy     5 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 12 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy  6 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

Fichiers / directoies: 1 087 180 800 octets (1,01 Go), 27 fichiers / 8 répertoires copiés sur un disque USB externe.

copy     *Not included in test
xcopy    57 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 58 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 56 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 60 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

Ce n'est en aucun cas un test exhaustif, mais le simple fait de lancer un scénario rapide du monde réel sur certains des outils les plus populaires de ce genre montre que votre assez sûr coller avec xcopy ou Robocopy (du point de vue des performances uniquement). L'option Robocopy /NP(pas de progression) vous fait également gagner 0 fois. Cela ne signifie pas pour autant que vous ne pouvez pas utiliser autre chose que xcopy. Robocopy est un excellent exemple (de Wikipedia ):

Robocopy est remarquable pour ses capacités au-delà des commandes intégrées de copie et
xcopy de Windows, notamment:

  • Capacité à tolérer les pannes de réseau et à reprendre la copie là où elle s'était arrêtée auparavant (les fichiers incomplets sont notés avec un horodatage correspondant au 01/01/1980 et contiennent un enregistrement de récupération afin que Robocopy sache où continuer).
  • Possibilité de copier correctement les attributs, les informations sur le propriétaire, les flux de données alternatifs, les informations d'audit et les horodatages par défaut, sans avoir besoin de nombreux commutateurs de ligne de commande souvent oubliés.
  • Possibilité de copier correctement les ACL NTFS (lorsque / COPYALL est fourni) et d'affirmer le "droit de sauvegarde" Windows NT (/ B) afin qu'un administrateur puisse copier un répertoire entier, y compris les fichiers dont la lisibilité a été refusée à l'administrateur.
  • Persistance par défaut, avec un nombre programmable de tentatives automatiques si un fichier ne peut pas être ouvert.
  • Un mode "miroir", qui maintient les arbres synchronisés en supprimant éventuellement les fichiers de la destination qui ne sont plus présents dans la source.
  • Possibilité de copier un grand nombre de fichiers qui autrement planteraient l'utilitaire XCOPY intégré.
  • Un indicateur de progression sur la ligne de commande qui se met à jour en continu.
  • Possibilité de copier des noms de fichiers et de dossiers longs dépassant 256 caractères - jusqu'à 32 000 caractères théoriques - sans erreurs.
Shaun Hess
la source
5

J'utilise généralement:

robocopy source dest /E /MIR

ou une autre variante des paramètres - peut-être /NFL /NDL /NS /NC /NPpour correspondre au "calme"

Marc Gravell
la source
oui, / NP est un must pour les photocopies rapides
Ivo Looser
quand vous devez créer exactement le même contenu que dans la source, je dois utiliser / MIR ou / PURGE à partir de la commande Robocopy.
Ivo Looser
1

En fait, en éliminant le réseau, vous avez vraiment restreint vos tests. Vous souhaiterez peut-être envisager d'utiliser un partage réseau, qui représentera une grande partie du travail d'administration.

En outre, vous devez utiliser FTP et ignorer complètement CIFS. Eseutil.exe est un autre utilitaire que vous pourriez y ajouter. (un utilitaire Exchange qui peut être utilisé ailleurs, avec ses quatre DLL dépendantes.)

Ensuite, j'aimerais voir vos résultats.

Len
la source
1

J'utilise XCopy dans le même but. J'ai également ajouté une autre carte réseau à ce serveur et l'ai placée sur un sous-réseau séparé. J'ai ensuite établi une connexion directe avec le serveur à partir duquel je transfère des fichiers. De cette façon, les 2 machines déplacent les données copiées via un sous-réseau et les utilisateurs peuvent toujours accéder via le deuxième nic qui est connecté directement au LAN.

Saif Khan
la source
1

Vous dites que la source et la destination sont sur le même lecteur, mais sont-elles toutes les deux sur le serveur de build?

Si le serveur de build est l'emplacement de la source et de la destination, envisagez de déplacer un dossier ou l'autre vers un autre lecteur, peut-être sur un autre contrôleur.

Si le serveur de build n'est pas l'emplacement de la source et de la destination (les drop de build ne sont pas toujours sur le serveur sur lequel ils sont construits), envisagez de créer une tâche sur le serveur où résident les dossiers source et de destination. Ensuite, lancez cette tâche à distance.

Donald Byrd
la source
1

J'ai dû faire plusieurs copies au fil des ans. Nous avons une machine Windows Server 2008 R2 qui contient un seul répertoire contenant plus de 12 millions d'images (environ 400 Go).

Évidemment, je préférerais que ce ne soit pas un si grand répertoire MAIS:

  • XCOPY gère la copie du grand dossier, mais se bloque lorsque vous essayez de passer du grand répertoire.
  • ROBOCOPY gère la copie sans problème et est une expérience beaucoup plus agréable lors de la copie en ce qu'elle offre de meilleurs indicateurs de progression.
  • XCOPY sur les petits répertoires est plus rapide.

Quoi qu'il en soit, je pensais juste partager mon expérience avec eux en raison de la nature inhabituelle de mon très gros répertoire.

Will Zablocki
la source