rm
la ricorsione funziona solo verso il basso, giusto?
rm -r x y
cancellerà x
e y
tutto ciò che contiene (se sono directory), ma non i loro genitori o qualcosa al di fuori di essi.
In esecuzione: sudo rm -R *.QTFS
eliminerà tutti i file * .QTFS nella directory corrente e i relativi figli, giusto?
No. Eliminerà tutti i file nominati *.QTFS
, tutti i file ricorsivamente all'interno delle directory chiamate *.QTFS
e quelle stesse directory. Se si desidera quell'altro comportamento di eliminazione, utilizzare find -delete
.
la directory corrente come visualizzata da ls -lha
contiene anche .
e ..
collegamenti per la mancanza di una parola migliore, quindi perché la ricorsione non li segue verso l'alto nella struttura delle directory? C'è un limite artificiale sulla rm app, o .
e ..
non sono cose reali?
È un limite artificiale di rm
.
In realtà non è poi così artificiale - è l'unico modo in cui potrebbe mai funzionare. Se rm
seguissero i ..
collegamenti principali , ognuno rm -r
rimuoverà tutti i file sul sistema, seguendo tutti i ..
collegamenti fino al ritorno /
. rm
vede le voci ..
e .
in ciascuna directory quando elenca il contenuto e le ignora esplicitamente per quel motivo.
Puoi provarlo tu stesso, in effetti. Esegui rm -r .
e la maggior parte delle rm
implementazioni rifiuteranno di agire, segnalando esplicitamente un errore:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(quel messaggio proviene da GNUrm
; altri sono simili). Quando incontra queste voci implicitamente, piuttosto che come argomenti espliciti, le ignora e continua. Tale comportamento è richiesto da POSIX . In GNU rm
e in molti BSD, viene fornito automaticamente dalla fts_read
famiglia di funzioni di gerarchia-attraversamento.
o .
e ..
non sono cose reali?
.
e ..
sono in genere voci di directory reali, sebbene siano specifiche del file system. Saranno quasi sempre presentati come se fossero voci reali per tutto il codice utente, indipendentemente. Molti software (e non solo rm
) hanno un caso particolare il loro comportamento al fine di catturare o impedire la fuga o la ricorsione indesiderata.