¿Cómo preservar los atributos de archivo cuando uno copia archivos en Windows?

41

En Linux, simplemente podemos hacer:

cp -pr directory

¿Cómo hacer eso en Windows? ¿Se puede hacer en el Explorador de Windows? ¿Alguna sugerencia de herramienta GUI?

Sería lo mejor si puedo mantener los permisos NTFS y el tiempo de creación / modificación / acceso. Como mínimo, necesito preservar la fecha de modificación para los archivos y los directorios. La copia del Explorador de Windows no conserva la fecha de modificación de los directorios.

netvope
fuente
1
No creo que sea un duplicado. El tiempo de creación del archivo es solo uno de los atributos del archivo.
netvope
Las respuestas en esa pregunta proporcionan un software que conservará todas las marcas de tiempo, mtime, ctime y atime.
John T
Esto puede ser de interés: support.microsoft.com/kb/310316 . Desafortunadamente, algunas de estas claves de registro ya no funcionan en Vista y hacia arriba.
Amro
robocopy c:\folderA c:\folderB /mir /ites todo lo que necesitas. Tenga en cuenta que esto eliminará completamente c: \ folderB y creará una nueva c: \ folderB que refleje c: \ folderA.
Pacerier

Respuestas:

6

No hay una manera simple de hacer esto en Windows. Hay varios programas que afirman poder preservar las fechas de creación de los archivos.
Aquí hay algunos programas que pueden hacer el truco http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html   (Enlace roto; no en la máquina Wayback).

Usar solo Windows Explorer no es posible. Si mira la documentación para CopyFile, la función CopyFile (winbase.h) , verá que evita el tema. Pero la  función CopyFile (Windows Developer Preview) (un archivo de 2012 de la misma URL) dice:

Semántica de tiempos de archivo

Este artículo debe documentar la semántica con respecto a los tiempos de creación / modificación / acceso de archivos.

Tiempo de creación: si el archivo de destino ya existe, su tiempo de creación se conserva ; de lo contrario, se establece en la hora actual del sistema.
Tiempo de última modificación: siempre copiado del tiempo de modificación del archivo fuente.
Última hora de acceso: siempre configurada a la hora actual del sistema.

Daisetsu
fuente
El enlace está roto.
Smile4ever
21

RoboCopy puede preservar el tiempo m para los directorios con el modificador / DCOPY: T, pero esto solo funciona en Vista y versiones posteriores. También puede preservar las ACL. Alternativamente, FastCopy se puede configurar para preservar directorios mtimes, ACLs y ADSes .

afrazier
fuente
En Windows, la robocopia es la forma recomendada de hacerlo, ya que no solo copia los atributos del archivo / carpeta, sino que también permite la integridad adecuada del archivo y el manejo de errores durante todo el proceso de copia.
megamorf
@megamorf: ¿De qué manera la robocopy hace algo especial? No realiza ninguna suma de comprobación o hash de los datos, se basa en el sistema operativo para informar errores al igual que casi cualquier otro programa.
Afrazier 01 de
Estoy de acuerdo en que a partir de ahora robocopy no tiene una función de comparación de suma de comprobación previa y posterior. Pero en general, robocopy retransmitirá todo el archivo cuando ocurra un error. Si desea que se reanude la escritura del resto de un archivo en el destino después de que se haya producido un error sin transmitir nuevamente el archivo completo, especifique el modificador / Z.
megamorf
@afrazier, ¿por qué no simplemente usar /mir?
Pacerier
2
@Pacerier, porque la pregunta no se trata de reflejar un árbol, se trata de copiar archivos y carpetas y preservar la mayor cantidad de metadatos posible. No solo /mirelimina datos de la carpeta de destino, sino que también necesita /dcopy:tpreservar el directorio mtimes y /copyallpreservar más que solo las marcas de tiempo del archivo.
Afrazier
19

... o simplemente puede hacer un archivo zip (con el método de compresión configurado en "Almacenar") y luego descomprimir los archivos donde desea copiarlos. Los atributos de fecha / hora son los mismos que los archivos originales.

Gusano de seda
fuente
Buena idea. ¿Pero esto copia sobre "las otras cosas" como las propiedades del archivo, etc., etc.?
Pacerier
2
Esto no siempre funciona. Con 7-zip, por ejemplo, el uso de la compresión 7zip no conserva uno de los tiempos de archivo (se me olvida cuál). No conserva ningún tiempo de directorio (como recuerdo). Con ZIP, puede preservar los tiempos creados y modificados, pero 7zip solo mantiene algunas veces dependiendo de cómo descomprima: si arrastra y suelta o extrae del menú del programa . Prueba bien, joven saltamontes.
Jon
3
Muchas gracias, esto funcionó bien para mí. Utilicé 7zip, con formato ZIP (la fecha de creación no se conserva en formato 7Z).
AFract
¿Podría agregar el comando específico que usaría para hacer esto? ¿Un ejemplo del comando específico para usar el método de compresión que sugirió? Esto lo convertiría en una respuesta más completa ", en lugar de más una sugerencia o comentario. También evitaría que innumerables personas tengan que realizar una búsqueda para descubrir cómo cumplir su sugerencia. Además, como un bono, un enlace para documentos o un artículo con más información sobre este método sería increíble. Proporcionar toda la información evita que todos reinventen la rueda (de búsqueda) y puede aumentar drásticamente los votos a favor. ¡Gracias!
SherylHohman
6

Herramienta de línea de comandos de Robocopy (viene con la mayoría de las versiones de Windows)
En mi máquina con Windows 10 se encuentra enC:\Windows\System32

Desde Wikipedia , se puede usar con el siguiente conjunto de opciones para conservar las marcas de tiempo de archivos y directorios, así como otros atributos:

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

  • /DCOPY:Tpreservar las marcas de tiempo de los directorios originales (requiere la versión XP026 o posterior)
  • /E: Copie directorios de forma recursiva, incluidos los directorios vacíos
  • /R:0: no vuelva a intentar archivos bloqueados (el número de reintentos en el valor predeterminado de copias fallidas es 1 millón),

  • /COPYALL: Copie toda la información del archivo
    (equivalente a /COPY:DATSOU, donde

    • D= Datos,
    • A= Atributos,
    • T= Marcas de tiempo de archivo ,
    • S= Seguridad = ACL de NTFS,
    • O= Información del propietario,
    • U= Información de auditoría),

Si solo desea conservar las marcas de fecha y hora del directorio, pero no desea que se copien subdirectorios vacíos y no desea que se conserven otros atributos, puede usar:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

donde /Scopia subdirectorios no vacíos

Para ver la sintaxis completa, escriba robocopy /?en el símbolo del sistema o eche un vistazo a estas publicaciones de blog: https://ss64.com/nt/robocopy.html y https://techjourney.net/robocopy-syntax-command-line -conmutadores-y-ejemplos /

Un ejemplo de un comando que ejecuté recientemente:
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

Observe cómo excluir 2 subdirectorios requiere que la /XDbandera se use dos veces. Además, la segunda exclusión de directorio usa comillas porque hay espacios en el nombre del directorio.

Finalmente, puede agregar la /Lbandera para probar el comando antes de hacerlo de verdad. De esta manera, puede verificar que no copiará (ni eliminará) ningún directorio / archivo que no desee y que no haya errores en su comando.

Editar: gotcha al copiar desde un directorio raíz (también conocido como unidad) a una carpeta (directorio no root)

Después de ejecutar el comando de ejemplo anterior, ¡el directorio no estaba visible! (A pesar de que show hidden filesy show system filesse comprobaron en Windows 10!) El siguiente comando como por https://serverfault.com/a/455029/399723 fijo esto:

attrib -h -s C:\D_backup

Alternativamente, agregar /A-:SH"desarma el atributo oculto de los archivos del sistema", por lo que puede evitar que el directorio se oculte en primer lugar, según https://serverfault.com/a/565804/399723 . Consulte también https://ss64.com/nt/robocopy.html .
Esta discusión arroja más luz sobre esta opción como solución.

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

Otro software:

Alternativamente, puede descargar una versión GUI de robocopy si no desea usar la línea de comando.

Otra utilidad de Windows es XCopy , aunque está incluida en Windows 10, está en desuso. Vea el enlace para las trampas.

La página de Wikipedia para RoboCopy (vinculada en la parte superior de esta publicación) enumera otro software que se puede utilizar.

SherylHohman
fuente
1
Buena respuesta. Debería ser el elegido, ya que el primero está un poco desactualizado. Usé robocopy desde Windows 7 para recortar directorios vacíos de las copias de seguridad del cliente, sin embargo, creo que estaba disponible desde Windows XP
DGoiko
@DGoiko Creo que tienes razón. Lo utilicé ampliamente con Windows 7 seguro. Desafortunadamente, comprar portátiles especiales con Windows 7 Pro ya no es una opción. Así que ahora tengo Win 10. No creo que haya mirado alguna vez cuando tenía XP, pero ha existido por mucho tiempo. Simplemente no tan conocido.
SherylHohman
La interfaz gráfica de usuario de Robocopy es excelente.
Eddie Kumar
4

¡Sincronízalo! 3.5 conserva todas las marcas de tiempo (archivos y carpetas, modificación y creación). Es el único software que conozco en Windows XP que lo hace perfectamente, además de Robocopy, y he probado muchos. Sin embargo, tenga cuidado, puede producir archivos corruptos con archivos fuente descargados usando software como FlashGet u Orbit Downloader (los archivos resultantes tienen el mismo tamaño pero solo se copian 25kB, el resto está lleno de ceros). Le pregunté al creador del software si podía entender por qué, pero no tenía idea; Supongo que tiene que ver con la descarga de archivos de software en pequeños paquetes (destinados a optimizar la velocidad) y mi partición de datos está muy fragmentada.

Robocopy XP026 está incluido en Windows Vista, pero funciona en Windows XP. Busque "Robocopy XP026", o puedo enviar el archivo aquí, ya que no es muy fácil de encontrar. O puede instalar la GUI de Robocopy y luego buscar el robocopy.exearchivo en la carpeta System32, para usarlo desde la línea de comandos. El archivo que tengo es 208kB y el número de versión es 5.1.2600.26.

Sin embargo, parece haber un error con el "modo de copia de seguridad":

http://msmvps.com/blogs/martinzugec/archive/2008/03/03/ugly-bug-in-robocopy-ignoring-security-on-file-level.aspx

La versión de Robocopy XP027 aparentemente ya no tiene este error, pero no funciona en Windows XP.

Gabriel
fuente
Las utilidades de descarga de archivos (como Bittorrent) asignan el tamaño completo del archivo en el disco (lleno de 0) y descargan secciones de múltiples fuentes, almacenándolas en el lugar correcto del archivo. Los archivos cuando se inicien tendrán muchos 0000. ¡O bien el archivo nunca se descargó por completo o sincronícelo! vi demasiados 0000 y renuncié a la copia.
Chloe
¡Gracias! ¡Utilicé Synchronize It! ¡Es muy rápido también! SyncToy y Unison estaban arruinando los tiempos de modificación del archivo. Unison estaba corrompiendo los enlaces simbólicos de Cygwin. SyncToy incluso estaba copiando 'My Music', que resultó estar en un cruce en el destino, pero cuando lo actualicé, ¡seguía queriendo copiar de nuevo, a pesar de que todo estaba igual!
Chloe
3

RoboCopy debería poder hacerlo con el interruptor COPYALL. Puede obtener la versión GUI de Microsoft Technet .

Russ Warren
fuente
1
xcopy *.* C:\temp\Pics /c /d /e /h /i /k /q /r /s /x /y

No estoy seguro de qué interruptor mantiene la fecha del archivo, pero esto funciona. Luego comprimo el directorio C: \ temp \ Pics que también mantiene las fechas de los archivos como se mencionó anteriormente.

dmaier
fuente
1
¿Cómo encaja comprimir la copia en esta discusión?
Scott
También se ajusta manteniendo marcas de tiempo para los archivos [comprimidos], algo que parece ocupar a la persona que hizo la pregunta. De nada, Scott. Esto resulta ser una respuesta útil, si no la correcta.
amn
Esto conserva la fecha / hora del archivo, pero no lo hace para la carpeta.
barneco
1

La forma más simple para mí, hasta ahora, es el método "enviar a". No necesita ninguna aplicación externa. En mi experiencia, conserva todos los atributos del archivo original.

El método que utilicé antes era el método de compresión / carpeta zip. Aunque esto seguramente tomará más tiempo ya que los archivos no solo se copian, sino que se procesan y comprimen, tanto al comprimir como al descomprimir.

%appdata%\Microsoft\Windows\SendTo
o. C:\Users\_______\AppData\Roaming\Microsoft\Windows\SendTo

Agregue un acceso directo a la carpeta donde desea copiarlos, y el elemento aparecerá en su sendtomenú cuando haga clic con el botón derecho en el archivo que desea copiar.

tspmtel
fuente
Gracias por compartir el truco de usar "Clic derecho> Enviar a". Funciona, excepto por la fecha de creación. Anteriormente, yo estaba usando el comando xcopy nativa: xcopy Source Destination /kes. (El kindicador permite conservar la marca de tiempo de modificación, pero no se conserva la fecha de creación). El método de compresión para comprimir (o rar) es un buen método, pero a menudo lleva demasiado tiempo.
OuzoPower
0

Es simple mover carpetas y directorios y aún preservar la fecha de creación. Simplemente mantenga presionada Shifty arrastre la carpeta a la nueva ubicación (comando mover). La fecha de modificación será la fecha actual, pero la fecha de creación conservará la fecha original.

Davidus428
fuente
2
¡NO HAGAS ESTO! Esto elimina los archivos de la carpeta original. Acabo de perder datos irrecuperables de mi teléfono al intentar hacer esto (no CTRL + Z no funciona).
BadAtPHP
0

xcopy funciona bien para esto. Simplemente especifique el indicador / k para copiar atributos.

Sintaxis
xcopy Origen [Destino] [Parámetros opcionales]

El comando xcopy puede copiar uno o más archivos o árboles de directorios de una ubicación a otra. El comando xcopy se incluye en todas las versiones de Windows desde Windows 95 a Windows 8.

Chris
fuente
1
Acabo de probar el /Kparámetro y no conservó las fechas de creación.
CoDEmanX
Me parece que funciona a veces y a veces no funciona - Windows en su mejor momento;)
SebastianH
0

Lo logro con

rsync -avu --modify-window = 3602 directorio_origen / directorio_destino /

(esto realmente se usa como una herramienta de sincronización de un directorio a otro espejo y la opción de ventana de tiempo es para evitar problemas cuando los sistemas Windows mueven los relojes 1 hora para el horario de verano, etc. en comparación con los sistemas Linux)

en un entorno cygwin dentro de Windows o en una máquina virtual Linux dentro de Windows con unidades de Windows montadas (por ejemplo, con virtualbox)

NB cygwin y virtualbox son gratuitos y le permiten tener, en menor o mayor medida, la funcionalidad de linux en Windows; ambos requieren un poco de configuración, particularmente virtualbox, pero tienen muchos beneficios ...

Mi propio problema era que los archivos tenían la hora correcta pero los directorios no. rsync ha ordenado las fechas en los directorios, así como las fechas en los archivos.

tom
fuente
0

Este comando copia la misma marca de tiempo para los archivos. Tenga en cuenta que no marca exactamente el mismo tiempo para las carpetas en sí. También tenga en cuenta que coloqué comillas alrededor del origen (Temp1) y el destino (Temp2). Esto se hace en caso de que haya espacios en los caminos. No tengo espacios, pero pensé que debería incluirlo en el peor de los casos.

robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"

Para mantener las marcas de tiempo iguales para las carpetas también:

robocopy / E / copy: DAT / dcopy: DAT "C: \ Temp1" "c: \ Temp2"

pablo
fuente