Para copiar un directorio de forma recursiva, usar tarpara empaquetar un directorio y luego canalizar la salida a otro tarpara desempaquetar parece ser mucho más rápido que usar cp -r(o cp -a).
¿Por qué es esto? ¿Y por qué no se cppuede 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 contenía decenas de miles de archivos y carpetas, profundamente anidadas, pero con un total de solo unos 50 MB. No estoy seguro si eso es relevante.

Respuestas:
Cphace abrir-leer-cerrar-abrir-escribir-cerrar en un bucle sobre todos los archivos. Entonces, leer de un lugar y escribir en otro ocurre completamente entrelazado.Tar|tarlee y escribe en procesos separados, y ademástarutiliza múltiples hilos para leer (y escribir) varios archivos 'a la vez', permitiendo efectivamente que el controlador de disco recupere, almacene y almacene muchos bloques de datos a la vez. En general,tarpermite que cada componente funcione de manera eficiente, al tiempo quecpanaliza el problema en fragmentos dispares e ineficientemente pequeños.fuente
cpimplementaciones? ¿Cómo sabemos que es verdad? ¿Y por qué secpescribiría de una manera tan ineficiente? Cualquier implementación de libro de texto de una copia de archivo lee un búfer de n bytes a la vez y los escribe en el disco antes de leer otros n bytes. ¿Pero dice quecpsiempre lee el archivo completo antes de escribir la copia completa?