Un directorio es (conceptualmente) un "archivo" especial que contiene una lista de nombres y los números de inodo a los que apuntan esos nombres. Algunos nombres pueden ser subdirectorios. Hay una entrada especial ..
que apunta al directorio padre.
Entonces, está claro, cambiar el nombre de un archivo es fácil: solo cambia el nombre en la entrada del directorio, nada más. Esto sostiene si el archivo es realmente un archivo o es un "archivo" utilizado para almacenar el contenido de otro directorio. De hecho, la misma rename
llamada al sistema hace ambas cosas.
Copiar, sin embargo, es una operación mucho menos trivial. Usted podría simplemente copiar el "archivo" directorio, pero entonces tendría dos directorios donde se encuentran los archivos son los mismos (que serían los enlaces duros). Si tuviera un sistema que permita enlaces duros a directorios, sería, pero dado que ningún sistema moderno lo permite, al menos a los no root, debe hacer esa copia para cada subdirectorio. En realidad, puede solicitar cp
este comportamiento con cp -lR
: -l
para el enlace duro, -R
para esa recursión.
Pero dejar todo vinculado probablemente no sea lo que quieres. En su lugar, desea cp
copiar cada archivo. Esa es una operación bastante costosa: cada archivo debe leerse en la memoria y escribirse nuevamente en el disco en una segunda ubicación. En realidad, se requieren varias llamadas al sistema para abrir, leer, escribir y cerrar los archivos, y eso tiene que repetirse para cada archivo.
Los sistemas de archivos tradicionales también funcionan de esta manera en el disco. No hay ninguna forma de copiar un montón de archivos, aparte de revisar cada uno individualmente y copiarlo, y esos son los tipos de sistemas de archivos que estaban en uso cuando se diseñaron las utilidades básicas de la línea de comandos.
mv
pasando de un sistema de archivos a otro el mismo "solo cambia el nombre en la entrada del directorio"?