cp -r -l en MacOS (copia recursiva que preserva los enlaces duros)


12

Estoy tratando de copiar un árbol de directorios recursivamente preservando enlaces duros al archivo. Usando gnu cp, esto funcionaría con la bandera -l. Entonces, CP recrearía la estructura del directorio, pero no necesitaría copiar el contenido de cada archivo.

Esto es preliminar a una copia de seguridad, primero quiero hacer una copia barata (enlazada) de la copia de seguridad anterior y luego sincronizar el directorio de origen sobre esta copia. Aproximadamente:

 cp -r -l yesterdays_backup todays_backup
 rsync -a source_dir todays_backup

Desafortunadamente, el cp de OSX no admite la bandera -l, por lo que puedo decir, cpio no admite la copia recursiva. La otra alternativa es pax, pero eso lleva a que se copie toda la estructura del directorio:

 pax -rw backups/yesterdays_backup backups/todays_backup

transforma:

 yesterdays_backup
 |
  \source_dir (...)

a:

 todays_backup
 |
  \backups
          \yesterdays_backup
                            \source_dir(...)

Debería haber una manera fácil / obvia de hacer esto, pero actualmente estoy perplejo ... ¿Alguna alternativa a cpio y pax? Me gustaría evitar tener que instalar gnu cp.

Soy consciente de Timemachine, pero eso no hará una copia de seguridad de los directorios cifrados de forma incremental.

mac  backup  rsync  cp 

utilizando hallazgo, junto con cpio moverse por la falta de cpio recursiva como se describe aquí: ( mikerubel.org/computers/rsync_snapshots/#Incremental ), pero no parece muy elegante lo hace ...

Respuestas:


16

Es bastante fácil instalar cp desde MacPorts, sin embargo, si no desea o desea crear un script portátil, tiene tres opciones:

rsync

rsync --archive --link-dest=../yesterdays_backup backups/yesterdays_backup\
   backups/todays_backup

cpio

mkdir backups/todays_backup
cd backups/yesterdays_backup
find . -print | cpio -p -al ../todays_backup

paz

mkdir backups/todays_backup
cd backups/yesterdays_backup
pax -rwl . ../todays_backup

¿Qué pasa si el origen y el destino están en diferentes discos? ¿Rsync aún conservaría los enlaces duros de la fuente en la copia realizada en el destino?
lpacheco

7

Es fácil instalar el coreutilspaquete desde MacPorts que contiene el cpcomando GNU renombrado gcp.

Pero aún mejor, las versiones más nuevas de rsync, incluida la de OS X 10.5 al menos, admiten la opción --link-dest que debería eliminar la necesidad del cp -al inicial. Ver aquí . También es una buena práctica usar la opción -E para copiar atributos extendidos, ACL, etc.


1

Aunque cpiono es compatible con la copia recursiva directamente, puede alimentar la lista exacta de archivos que desea copiar en su entrada estándar y lograr el efecto de una copia recursiva utilizando findcanalizado cpio. Esto es directamente análogo al uso de GNU tarcon las opciones -T -(lo que significa leer la lista de archivos para hacer una copia de seguridad desde la entrada estándar).


1

Creo que lo que quieres también se puede lograr con ditto yesterdays_backup todays_backup. De manera predeterminada, dittorealiza una copia recursiva que conserva los enlaces duros, las ACL y los atributos extendidos.


El problema es que la copia ya no es barata cuando el objetivo es crear enlaces duros a través del alcance del directorio. lo mismo puede preservarlos cuando existen, pero no se le puede pedir que enlace en lugar de crear un duplicado.
Florenz Kley

No creo que se pueda decir a ditto que conserve los enlaces duros del directorio. la página del manual dice que solo archiva enlaces duros
Chris F Carroll

0

+1 por la respuesta de Pauls. ídem podría ser una opción, pero sólo si se utiliza junto con find - no preservar los enlaces duros, pero sólo dentro de los directorios.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.