7 votos

¿Es posible clonar directorios en APFS?

APFS supuestamente

características de la clonación de archivos y directorios

Me gustaría saber cómo funciona esto, pero no encuentro la manera de utilizar esta función.

La única página man que parece vagamente relevante es clonefile(2) que dice:

Si src nombra un directorio, la jerarquía de directorios se clona como si cada fuera clonado individualmente. Sin embargo, el uso de copyfile(3) es más para copiar grandes jerarquías de directorios en lugar de clonefile(2)

Pero al consultar la página de manual de copyfile(3) dice:

Tenga en cuenta también que no hay soporte para clonar directorios: si se proporciona un se proporciona un directorio como fuente, se devolverá un error. (Esto sólo es aplicable para el copyfile() función).

Esto se aclara más adelante en la página:

Porque copyfile() no permite la clonación de directorios, un clon recursivo copiará cualquier directorio que encuentre (mientras clonando su contenido).

Sin embargo, algunas entradas de blog sobre el tema parecen dar a entender que Finder puede realizar esta operación utilizando option + arrastre del ratón, pero cuando lo pruebo aquí, parece idéntico a una copia recursiva, y ni siquiera está clonando los archivos contenidos, y mucho menos el directorio.

Entonces, ¿cuál es el problema aquí? ¿Está implementada la función? Si lo está, ¿cómo puedo hacer que funcione? ¿O es algo que han implementado en el formato en disco pero que nunca se ha enganchado a ninguna API o herramienta?

6voto

SuperDuck Puntos 1026

clonefile() es la llamada al sistema que te interesa. Se introdujo en macOS 10.12 (Sierra), coincidiendo con el lanzamiento de la beta pública de APFS.

copyfile() es una función de la biblioteca C que se introdujo en Mac OS X 10.5 (Leopard). Como ha visto en la página de manual, aunque admite la clonación de archivos, no es el comportamiento por defecto.

No estoy seguro de por qué clonefile(2) afirma que "el uso de copyfile(3) es más apropiado para copiar grandes jerarquías de directorios en lugar de clonefile(2) " - Sólo puedo suponer que es por razones de eficiencia. En cualquier caso, ambas APIs le permitirán clonar archivos sin duplicar ninguna extensión de archivo en el disco.

Puedo confirmar que, al menos en mi caso, MacOS 10.15 (Catalina) sí clona archivos grandes (probado con archivos de más de 100 MB en un volumen APFS) al "copiarlos" en el Finder, ya sea usando CMD-C y CMD-V, o ALT-arrastrar-y-soltar. Lo mismo ocurre con los directorios, en el sentido descrito en clonefile(2) . Es decir, se copian todos los directorios implicados (aparecerán nuevos inodos y dentrías en el disco), y se clonan todos los archivos implicados.

Cabe destacar que, para cumplir con POSIX, cp es necesario para hacer copias no clonadas (duplicar los extensiones de los archivos en el disco), pero usándolo con el -c anulará este comportamiento y clonará los archivos mediante clonefile() en su lugar - ver cp(1) . Así, cp -Rc es lo que buscas si quieres clonar directorios en la terminal. No estoy seguro de cuándo se introdujo esta bandera, pero probablemente fue junto a la liberación de clonefile() en MacOS 10.12. Según esta charla (archivo MP4 de 1,28 GB) de Tim Standing, esto ha sido así al menos en las versiones públicas de macOS desde enero de 2018.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X