Hai eliminato (quasi) tutta la tua home directory!
rm -r something
elimina in modo ricorsivo file e directory in / sotto qualcosa ; fallirà solo su elementi che non ha il permesso di cancellare, sia perché sono di proprietà di un altro utente (es. root
), sia perché sono in uso (es. un mount GVFS).
Se non aggiungessi -f
(come in, rm -rf something
), otterrai qualcosa del tipo:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
A questo punto puoi interrompere e probabilmente ti rendi conto che hai eseguito il comando sbagliato.
Suggerimenti della comunità su come evitare tali incidenti
Nota: wiki della comunità, tutti non esitate a contribuire.
Per alcuni file, utilizzare l' -i
opzione per ottenere una conferma sulla rimozione di file o directory:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Se si rimuove da una directory corrente, aggiungere un prefisso a ./
per evitare di rimuovere erroneamente una posizione diversa .:
$ cd something
$ rm -v ./*~
removed ‘./file~’
Quanto sopra era per dimostrare l'uso di ./
. Se esiste una sottodirectory, puoi ovviamente usare rm -v something/*~
anche. Attenzione : non pensare che rm ./.*
rimuova tutti i file nascosti nella directory corrente. Vedere questa domanda Serverfault per soluzioni alternative su globbing di file nascosti.
Sposta anziché eliminare: piuttosto che eliminare i file in modo ricorsivo, in primo luogo mi sono abituato a spostare i file che voglio eliminare da qualche altra parte prima di eliminarli definitivamente. Se qualcosa è andato storto è facile da ripristinare.
mv -b SOURCE DEST
Utilizzare find
(possibilmente con grep
) per visualizzare l' anteprima se si desidera eliminare in modo ricorsivo i file selezionati. Dovresti provare a rendere questo un evento raro, ma se devi ...
find
senza argomenti elenca in modo ricorsivo tutti i file / directory in quello corrente. Dovresti provare a cercareman find
come renderlo selettivo (un tesoro), ma se non vuoi preoccuparti, puoi semplicemente usare il familiare grep
per filtrare i file che vuoi eliminare.
- Supponiamo che io sia un hacker del kernel uber-l33t e che sia infastidito dai pochi KB di file "di esempio" nel mio albero dei sorgenti; Voglio eliminare tutti i file contenenti quello nel nome. Quindi scrivo
find | grep example
, il che mi dà questi 20 file. Sembra buono, quindi ora vado a eliminare quei file esatti, insieme rm -v
all'output dettagliato precedentemente menzionato, tramite xargs
:
trova | esempio grep | xargs rm -v
che mi dà questo risultato. Tali problemi impedisce Ascolto in anteprima in cui dicono, si commette un errore di battitura e digitare sample
al posto di example
.
La soluzione di cui sopra non deve essere utilizzata se si possono avere nomi di file contenenti spazi, caratteri di tabulazione, nuove righe o virgolette ( "
o '
), poiché ciò comporterebbe xargs
un errore o un'alimentazione rm
con nomi di file incompleti, che nel caso peggiore potrebbero finire per rimuovere l'errore File. Il modo sicuro per fare quanto sopra è fare tutto confind
gli operatori e le azioni.
Di seguito verranno mostrati tutti i file che contengono la parola example
find . -name "*example*"
Se l'elenco contiene i file che si desidera rimuovere, utilizzare l' -exec
azione per passare i file rm
.
find . -name "*example*" -exec rm -v {} +
Vedere Utilizzo di Trova per ulteriori informazioni sull'utilizzo find
.