rm
la récursivité ne fonctionne que vers le bas correct?
rm -r x y
supprimera x
et y
et tout ce qui s'y trouve (s'il s'agit de répertoires), mais pas leurs parents ou quoi que ce soit en dehors d'eux.
En cours d'exécution: sudo rm -R *.QTFS
supprimera tous les fichiers * .QTFS du répertoire actuel et ses enfants, correct?
Non. Il supprimera tous les fichiers nommés *.QTFS
, tous les fichiers récursivement dans les répertoires appelés *.QTFS
et ces répertoires eux-mêmes. Si vous souhaitez cet autre comportement de suppression, utilisez find -delete
.
le répertoire actuel affiché par ls -lha
contient également .
et des ..
liens pour l'absence d'un meilleur mot, alors pourquoi la récursivité ne suit-elle pas ces liens vers le haut dans l'arborescence des répertoires? Y a-t-il une limite artificielle à l'application rm, ou .
et ce ..
ne sont pas des choses réelles?
C'est une limite artificielle de rm
.
Ce n'est pas vraiment artificiel, c'est la seule façon dont cela pourrait fonctionner. Si rm
les ..
liens parents étaient suivis , chacun rm -r
supprimerait tous les fichiers du système, en suivant tous les ..
liens jusqu'au bout /
. rm
voit les entrées ..
et .
dans chaque répertoire lorsqu'il répertorie le contenu et les ignore explicitement pour cette raison.
Vous pouvez l'essayer vous-même, en fait. Exécutez rm -r .
et la plupart des rm
implémentations refuseront d'agir, signalant explicitement une erreur:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(ce message vient de GNUrm
; d'autres sont similaires). Lorsqu'il rencontre ces entrées implicitement, plutôt que comme arguments explicites, il les ignore simplement et continue. Ce comportement est requis par POSIX . Dans GNU rm
et dans de nombreux BSD, il est fourni automatiquement par la fts_read
famille de fonctions de traversée de hiérarchie.
ou .
et ..
ne sont pas de vraies choses?
.
et ..
sont généralement de véritables entrées de répertoire, bien que cela soit spécifique au système de fichiers. Ils seront presque toujours présentés comme s'ils étaient de véritables entrées pour tout le code utilisateur, indépendamment. De nombreux logiciels (et pas seulement rm
) mettent en évidence leur comportement afin d'attraper ou d'empêcher une récursion incontrôlée ou indésirable.