So che questo cancellerà tutto in una sottodirectory e sotto di essa:
rm -rf <subdir-name>
Ma come si cancella tutto nella directory corrente così come ogni sottodirectory sottostante e il contenuto di tutte quelle sottodirectory?
So che questo cancellerà tutto in una sottodirectory e sotto di essa:
rm -rf <subdir-name>
Ma come si cancella tutto nella directory corrente così come ogni sottodirectory sottostante e il contenuto di tutte quelle sottodirectory?
Risposte:
Fai pratica con il computing sicuro. Basta salire di un livello nella gerarchia e non utilizzare un'espressione con caratteri jolly:
cd ..; rm -rf -- <dir-to-remove>
I due trattini --
indicano rm
che <dir-to-remove>
non è un'opzione della riga di comando, anche quando inizia con un trattino.
rm ./
potresti scrivere accidentalmente rm . /
che potrebbe essere un disastro.
Eliminerà tutti i file / directory sotto quella corrente.
find -mindepth 1 -delete
Se vuoi fare lo stesso con un'altra directory di cui hai il nome, puoi semplicemente nominarla
find <name-of-directory> -mindepth 1 -delete
Se vuoi rimuovere non solo le sue sottodirectory e file, ma anche la directory stessa, ometti -mindepth 1
. Fallo senza -delete
per ottenere un elenco delle cose che verranno rimosse.
-mindepth 1
se si specifica una directory ( find <name-of-directory> -mindepth 1 -delete
). Altrimenti Johannes ha ragione, non cancellerà la directory di lavoro corrente (durante l'utilizzo find -delete
).
find -mindepth 1 -delete
ma ho ottenuto illegal option -- m
ma ha funzionato alla grande quando ho rimosso l'opzione Mindepth find . -delete
Quello che faccio sempre è digitare
rm -rf *
e poi premi ESC- * , e bash espanderà * in un elenco esplicito di file e directory nella directory di lavoro corrente.
I vantaggi sono:
In effetti, mi piace così tanto che l'ho impostato come comportamento predefinito per TAB con questa riga in .bashrc:
bind TAB:insert-completions
--
in questa risposta? Questo approccio è fantastico nel complesso, devo dire.
Uso
rm -rf *
Aggiornamento: .
sta per directory corrente, ma non possiamo usarlo. Il comando sembra avere controlli espliciti per .
e ..
. Usa invece il carattere jolly globbing. Ma questo può essere rischioso.
Una versione più sicura IMO è usare:
rm -ri *
(questo richiede una conferma prima di eliminare ogni file / directory.)
È corretto che rm –rf .
rimuoverà direttamente tutto ciò che è presente nella corrente, comprese eventuali sottodirectory e il loro contenuto. Il punto singolo ( .
) indica la directory corrente. fare attenzione a non farlo rm -rf ..
poiché il doppio punto ( ..
) indica la directory precedente.
Detto questo, se sei come me e hai più finestre di terminale aperte allo stesso tempo, faresti meglio a stare al sicuro e usa rm -ir .
Guardiamo gli argomenti del comando per capire perché.
Primo, se guardi la rm
pagina man dei comandi ( man rm
sotto la maggior parte di Unix) noterai che –r
significa "rimuovere il contenuto delle directory ricorsivamente". Quindi, fare rm -r .
da solo cancellerebbe tutto nella directory corrente e tutto ciò che si trova sotto.
Nella rm –rf .
-f aggiunta significa "ignora i file inesistenti, non chiedere mai". Quel comando elimina tutti i file e le directory nella directory corrente e non ti chiede mai di confermare che vuoi davvero farlo. -f
è particolarmente pericoloso se esegui il comando con un utente con privilegi poiché potresti eliminare il contenuto di qualsiasi directory senza avere la possibilità di assicurarti che sia davvero quello che vuoi.
Sul otherhand, nel rm -ri .
l' -i
che sostituisce i -f
mezzi "pronta prima di ogni rimozione". Ciò significa che avrai la possibilità di dire "oups! Non è quello che voglio" prima che rm elimini felicemente tutti i tuoi file.
Nei miei primi giorni di amministratore di sistema ho fatto un rm -rf /
su un sistema mentre ero connesso con tutti i privilegi (root). Il risultato sono stati due giorni trascorsi a ripristinare il sistema dai backup. Ecco perché ora lavoro rm -ri
adesso.
rendere sicuro ci si trova nella directory corretta
rm -rf *
Credo che questa risposta sia migliore:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Se viene chiamata la directory di primo livello
images
, eseguirerm -r images/*
. Questo utilizza l'operatore glob della shell*
per eseguirerm -r
su ogni file o directory all'interno delle immagini.
fondamentalmente si sale di un livello e quindi si dice elimina tutto nella directory X. In questo modo stai ancora specificando quale cartella dovrebbe avere il suo contenuto cancellato, il che è più sicuro che dire semplicemente "elimina tutto qui", preservando la cartella originale, (cosa che a volte vuoi perché non sei autorizzato o semplicemente non vuoi per modificare le autorizzazioni esistenti della cartella)