Un répertoire est (conceptuellement) un "fichier" spécial contenant une liste de noms et les numéros d'inode vers lesquels ces noms pointent. Certains noms peuvent être des sous-répertoires. Il existe une entrée spéciale ..
qui pointe vers le répertoire parent.
Il est donc facile de changer le nom d'un fichier: il suffit de changer le nom dans l'entrée du répertoire, rien d'autre. Ceci est valable si le fichier est en réalité un fichier ou un "fichier" utilisé pour stocker le contenu d'un autre répertoire. En effet, le même rename
appel système fait les deux.
La copie est cependant une opération beaucoup moins triviale. Vous pouvez simplement copier le répertoire "fichier", mais vous disposerez alors de deux répertoires dans lesquels les fichiers sont identiques (ce sont des liens physiques). Si vous aviez un système qui autorise les liens physiques vers des répertoires, ce serait le cas, mais comme aucun système moderne ne permet cela, du moins pour les lecteurs non root, vous devez faire cette copie pour chaque sous-répertoire. Vous pouvez réellement demander cp
ce problème avec cp -lR
: -l
for link, -R
pour cette récursion.
Mais laisser tout lié n'est probablement pas ce que vous voulez. Au lieu de cela, vous voulez cp
copier chaque fichier. C'est une opération assez coûteuse: chaque fichier doit être lu en mémoire et réécrit sur le disque dans un deuxième emplacement. Il faut en fait plusieurs appels système pour ouvrir, lire, écrire et fermer les fichiers, et cela doit être répété pour chaque fichier.
Les systèmes de fichiers traditionnels fonctionnent de la même manière sur le disque. Il n’existe aucun moyen de copier un groupe de fichiers, sauf de les parcourir individuellement et de les copier, et il s’agit des types de systèmes de fichiers utilisés lors de la conception des utilitaires de base en ligne de commande.
mv
d’un système de fichiers à un autre est-il identique "changez simplement le nom dans l’entrée du répertoire"?