¿Se pueden conservar las marcas de tiempo al copiar archivos en OS X?

14

Estoy interesado en combinar los archivos de tres Mac copiando los archivos de cada uno en una sola jerarquía de carpetas de mi diseño en un disco duro externo.

En mi experiencia anterior al copiar archivos en OSX, a veces los archivos pierden sus marcas de tiempo creadas y modificadas; es decir, se cambian al momento presente cuando ocurre la copia del archivo.

¿Cómo puedo asegurarme de que esto no suceda?

el espejo
fuente
¿Cuándo pierdes las marcas de tiempo?
lhf
Copiándolos, ¿cómo?
Gerry

Respuestas:

11

Acabo de encontrarme con esto, y el cpcomando incorporado realmente lo maneja.

Descubrí un montón de viejas tarjetas CF de las que quería cosechar las imágenes. Mis scripts de procesamiento verán el archivo mtime para colocarlo en el lugar correcto, por lo que necesitaba que se conservara.

Desde la página del manual :

 -p    Cause cp to preserve the following attributes of each source file in the copy: modification time,
       access time, file flags, file mode, user ID, and group ID, as allowed by permissions.  Access
       Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
       served.

       If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
       is not altered.

       If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
       ID bit is not preserved in the copy's permissions.  If the source file has its set-group-ID bit
       on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
       missions.  If the source file has both its set-user-ID and set-group-ID bits on, and either the
       user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
       served in the copy's permissions.

Entonces, usando zshpude ejecutar ( NO NAMEsiendo el nombre del volumen de mis tarjetas):

cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics

Creo que la /**/*construcción especial es específica de ZSH; sin embargo podrías hacer algo como

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path
Andrew Burns
fuente
+1 Un simple cp -pes sencillo, conserva el tiempo modificado (probablemente la más útil de las tres marcas de tiempo en un archivo) y no requiere la creación de un archivo de archivo intermedio.
wberry
1
Hasta donde yo sé, "cp -p" olvida la fecha de creación y, en cambio, la establece en la fecha de modificación. Lo cual es un comportamiento bastante absurdo.
Nicolas Barbulesco
1
cp -psin embargo, no funciona al copiar de HFS + a FAT32.
NobleUplift
9

Yo uso rsync para hacer este tipo de copia. Sin embargo, tenga en cuenta que la versión proporcionada por Apple es 2.6.9 y tiene errores en esto. Por lo tanto, debe obtener un tercero construido, ya sea usted mismo o mediante un administrador de paquetes

por ejemplo

rsync -aE source_dir target_dir

La opción -Ecopia las ACL y -aconserva los permisos y tiempos de Unix. (bueno, lo hizo en rsync 2 rsync 3 parece necesitar -AX)

rsync También se puede configurar para copiar en máquinas remotas sin montar unidades.

Hay algunos front- end GUI para rsync, por ejemplo, aRsync . Para otras herramientas de sincronización de directorios, vea esta pregunta .

usuario151019
fuente
rsynces una buena solución, pero tenga en cuenta que no conserva los tiempos de acceso. pax(ver mi respuesta a continuación) lo hace.
jaume
1
Hasta donde yo sé, "rsync" olvida la fecha de creación y, en cambio, la establece en la fecha de modificación. Lo cual es un gran fracaso.
Nicolas Barbulesco
→ jaume: cualquier comando que realice cualquier forma de copia del "archivo a" hacia el "archivo b" debe leer primero el "archivo a". Por lo tanto, el tiempo de acceso del "archivo a" debe modificarse. Esta no es una característica a nivel de comando sino a nivel de kernel. Si un comando, a través de otra llamada al sistema, restaura el tiempo de acceso a su estado anterior, entonces este es un truco peligroso, porque es una mentira simple .
dan
→ Nicolas: cf. man rsyncy busque preserve times:) ⇒ la respuesta de Mark es correcta.
dan
1
→ Mark, @daniel: acabo de probar rsync en Mac OS X 10.6.8. Una copia local de una carpeta con "rsync -rt" olvida la fecha de creación de los archivos y la reemplaza por su fecha de modificación. A pesar del manual para "rsync" que dice "preservar tiempos" para la opción -t. El error probablemente también esté presente en Mavericks y Yosemite.
Nicolas Barbulesco
4

Uso pax. El paxformato predeterminado , llamado ustar , conserva la modificación de archivos y los tiempos de acceso (entre otras cosas, como ID de usuario, ID de grupo, bits de modo de archivo y atributos extendidos como comentarios de Spotlight y ACL). Vea la paxpágina del manual aquí para más detalles.

Primero, cree un paxarchivo en cada Mac y cópielo en el disco duro externo de esta manera:

  1. Abra Aplicaciones> Utilidades> Terminal.
  2. Escriba en la Terminal:

    $ cd
    

    y arrastre la carpeta donde residen los archivos que se combinarán en esa Mac a la Terminal:

    ingrese la descripción de la imagen aquí

    Alternativamente, puede escribir el nombre completo de la carpeta:

    $ cd /path/to/your\ folder
    

    Esto cambiará la carpeta actual a 'su carpeta'.

  3. Archive la carpeta con pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Use el Finder para copiar el archivo recién creado yourfolder.ustaren el disco duro externo.

Luego extraiga los archivos con pax:

  1. Abra la Terminal en la Mac que tiene el disco duro externo USB enchufado.

  2. Cambie la carpeta actual a la jerarquía de carpeta única en el disco duro externo con el comando cdcomo se explicó anteriormente:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Extraer los archivos:

    $ pax -r -p e < yourfolder.ustar
    $ pax -r -p e < yourfolder2.ustar
    $ pax -r -p e < yourfolder3.ustar
    $ ls
    your folder
    your folder 2
    your folder 3
    
  4. Mueva los archivos con el Finder si es necesario (el Finder conserva la modificación del archivo y los tiempos de acceso dentro del mismo volumen).

(He probado este procedimiento en OS X 10.8 (Mountain Lion)).

jaume
fuente
1
No funciona para nombres de archivo de más de 200 caracteres community.hpe.com/t5/Ignite-UX/…
amleszk
0

Comprímalos con zip o selecciónelos con Ctrl-clic o clic derecho y seleccione Comprimir. Copie los archivos comprimidos en su sistema de destino y ábralos allí.

Si puede, formatee su unidad externa como un sistema de archivos Mac OS, no como FAT.

lhf
fuente
No haga clic en la opción. Ctrl-clic. O haz clic derecho.
Nicolas Barbulesco
1
La mejor opción para formatear el disco es Mac OS Extended Journalled. Mac OS Extended también se llama HFS +.
Nicolas Barbulesco