Para copiar recursivamente un directorio, usar tar
para empaquetar un directorio y luego enviar la salida a otro tar
para descomprimir parece ser mucho más rápido que usar cp -r
(o cp -a
).
¿Por qué es esto? ¿Y por qué no se puede cp
hacer más rápido haciéndolo de la misma manera debajo del capó?
Editar: noté esta diferencia al intentar copiar una enorme estructura de directorios que contiene decenas de miles de archivos y carpetas, profundamente anidados, pero con un total de solo unos 50 MB. No estoy seguro si eso es relevante.
Respuesta1
Cp
abre-lee-cierra-abre-escribe-cierra en un bucle sobre todos los archivos. De modo que la lectura de un lugar y la escritura en otro se producen totalmente intercaladas. Tar|tar
realiza lectura y escritura en procesos separados y, además, tar
utiliza múltiples subprocesos para leer (y escribir) varios archivos "a la vez", lo que permite de manera efectiva que el controlador de disco obtenga, almacene en buffer y almacene muchos bloques de datos a la vez. En definitiva, tar
permite que cada componente funcione de manera eficiente y, al mismo tiempo, cp
divide el problema en partes dispares e ineficientemente pequeñas.
Respuesta2
Su edición va en la buena dirección: cp
no es necesariamente más lenta que tar | tar
. Depende, por ejemplo, de la cantidad y el tamaño de los archivos. Para archivos grandes cp
lo mejor es un formato simple, ya que es un trabajo simple de distribuir datos. Para muchos archivos pequeños, la logística es diferente y tar
podría funcionar mejor. ver por ejemploesta respuesta.