57 votes

Comment préserver les attributs de fichier lors de la copie de fichiers sous Windows?

Sur Linux, nous pouvons simplement faire :

cp -pr répertoire

Comment faire cela dans Windows? Est-il possible de le faire dans l'Explorateur Windows? Des suggestions d'outils GUI?

Ce serait le mieux si je pouvais conserver les autorisations NTFS et l'heure de création/modification/d'accès. Au minimum, je dois préserver la date de modification des fichiers et des répertoires. La copie de Windows Explorer ne préserve pas la date de modification pour les répertoires.

30voto

Dwight Kelly Points 711

... ou vous pouvez simplement créer une archive zip (avec la méthode de compression définie sur "Store" uniquement), puis décompressez les fichiers où vous voulez les copier. Les attributs de date/heure sont les mêmes que ceux des fichiers originaux.

24voto

afrazier Points 22479

RoboCopy peut préserver l'horodatage mtime pour les répertoires avec l'interrupteur /DCOPY:T, mais cela ne fonctionne que dans Vista et les versions ultérieures. Il peut également préserver les ACL. Alternativement, FastCopy peut être configuré pour préserver les horodatages des répertoires, les ACL et les ADSes.

24voto

SherylHohman Points 957

Outil en ligne de commande Robocopy (livré avec la plupart des versions de Windows)
Sur ma machine Windows 10, il se trouve dans C:\Windows\System32

Selon Wikipedia, il peut être utilisé avec l'ensemble d'options suivant pour préserver les horodatages des fichiers et des répertoires, ainsi que d'autres attributs :

Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0

  • /DCOPY:T préserver les horodatages d'origine des répertoires (requiert la version XP026 ou ultérieure)

  • /E : Copier les répertoires récursivement, y compris les répertoires vides

  • /R:0 : ne pas réessayer les fichiers verrouillés (le nombre de tentatives de copies échouées par défaut est d'1 million),

  • /COPYALL : Copier toutes les informations de fichier,
    (équivalent à /COPY:DATSOU, où

    • D = Données,
    • A = Attributs,
    • T = Horodatages de fichiers,
    • S = Sécurité = ACL NTFS,
    • O = Informations sur le propriétaire,
    • U = Informations d'audit),

Si vous voulez uniquement préserver les horodatages de date et des répertoires, mais ne souhaitez pas que les sous-répertoires vides soient copiés et ne souhaitez pas que d'autres attributs soient préservés, vous pouvez utiliser :
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

/S copie les sous-répertoires non vides

Pour voir la syntaxe complète, tapez robocopy /? dans une invite de commandes, ou consultez ces articles de blog : https://ss64.com/nt/robocopy.html et https://techjourney.net/robocopy-syntax-command-line-switches-and-examples/

Un exemple de commande que j'ai récemment exécutée :
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Remarquez comment exclure 2 sous-répertoires nécessite d'utiliser le drapeau /XD deux fois. De plus, la deuxième exclusion de répertoire utilise des guillemets car il y a des espaces dans le nom du répertoire.

Enfin, vous pouvez ajouter le drapeau /L pour tester la commande avant de la réaliser réellement. De cette manière, vous pouvez vérifier qu'elle ne copie (ou ne supprime) aucun répertoire/fichier non désiré, et qu'il n'y a pas d'erreurs dans votre commande.

Édition : problème lors de la copie depuis un Répertoire Racine (ou disque) vers un Dossier (répertoire non racine)

Après avoir exécuté la commande d'exemple ci-dessus, le répertoire était invisible ! (Même si l'option afficher les fichiers cachés et afficher les fichiers système étaient cochées dans Windows 10 !) La commande suivante selon https://serverfault.com/a/455029/399723 a corrigé cela :

attrib -h -s C:\D_backup

De manière alternative, l'ajout de /A-:SH "annule l'Attribut Masqué des fichiers système", ce qui peut empêcher que le répertoire devienne invisible initialement, comme indiqué sur https://serverfault.com/a/565804/399723. Voyez aussi https://ss64.com/nt/robocopy.html.
Cette discussion apporte plus de détails sur cette option en tant que solution.

Robocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Autre Logiciel :

De manière alternative, vous pouvez télécharger une version GUI de Robocopy si vous ne souhaitez pas utiliser la ligne de commande.

Un autre utilitaire Windows est XCopy, bien qu'il soit inclus dans Windows 10, il est en voie de suppression. Consultez le lien pour les points à surveiller.

La page Wikipedia pour RoboCopy (liée en haut de ce post) répertorie d'autres logiciels pouvant être utilisés.

6voto

Daisetsu Points 5655

Il n'y a pas de moyen simple de le faire sous Windows. Il existe plusieurs programmes qui prétendent pouvoir préserver les dates de création des fichiers.
Voici quelques programmes qui pourraient faire l'affaire http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html (Lien cassé ; non disponible dans la Wayback Machine).

En utilisant simplement l'Explorateur Windows, ce n'est pas possible. Si vous consultez la documentation de CopyFile, CopyFile function (winbase.h), vous verrez qu'elle évite le sujet.  Mais CopyFile function (Windows Developer Preview) (une archive de 2012 de la même URL) dit :

Sémantique des temps de fichier

Cet article devrait documenter les sémantiques par rapport aux temps de création / modification / accès aux fichiers.

Temps de création : si le fichier cible existe déjà, son temps de création est préservé, sinon il est défini sur l'heure système actuelle.
Dernière heure de modification : toujours copiée à partir de l'heure de modification du fichier source.
Dernière heure d'accès : toujours définie sur l'heure système actuelle.

4voto

Jorge Alves Points 400

RoboCopy devrait être capable de le faire avec l'interrupteur COPYALL. Vous pouvez obtenir la version GUI sur Microsoft Technet.

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