Come cancello tutto in una directory?


25

Come posso eliminare tutto in una directory, inclusi file e directory nascosti?

In questo momento, utilizzo quanto segue:

rm -rf *
rm -rf .*

5
Puoi combinarli a rm -rf .* *.
utente sconosciuto

2
Puoi andare su una directory e poi eseguirerm -rf yourdirectory/*
shreyansp,

1
scusate la parte di directory nascosta persa. La soluzione per gli utenti precedenti copre questo
shreyansp,

La seconda opzione che hai pubblicato è molto pericolosa. Corrisponderà alla ..directory, che eliminerà tutto ciò che si trova nella directory sopra .
Richard Peterson,

Risposte:


17

Semplice e diretto:

find -delete 

Include directory e file nascosti. Almeno gnu-find lo sa -delete, il tuo findpotrebbe essere diverso.


1
Per evitare di eliminare la directory, utilizzare find /path -delete -mindepth 1.
orodbhen,

@orodbhen: find -delete non cancella la directory, dove si avvia il comando (come nella domanda con rm).
utente sconosciuto

11

La migliore risposta è: non farlo. Rimuovere in modo ricorsivo la directory stessa, quindi ricrearla come directory vuota. È più affidabile e più facile per le altre persone capire cosa stai cercando di fare. Quando si ricrea la directory, potrebbe avere un proprietario, un gruppo e autorizzazioni diversi. Se quelli sono importanti, fai attenzione. Inoltre, se qualche programma in esecuzione ha handle di file (descrittori) aperti nella directory, non vorrai rimuoverlo. Se nessuno di questi casi speciali si applica, è più semplice rimuovere l'intera directory.


7
Quindi com'è più facile. 'Stai attento' non è una risposta. Non capirei perché qualcuno elimina una directory e la ricostruisce di nuovo.
utente sconosciuto

Ho aggiunto la frase "come directory vuota", forse è più chiaro.
Chris Quenelle,

2
No, non spiega perché si elimina una directory e la si ricrea quindi. Alle cose da considerare appartiene, tra l'altro, anche la data / ora della creazione.
utente sconosciuto

2
Se quella directory è la directory di lavoro corrente di alcuni processi, potresti riscontrare problemi. Inoltre, se si rimuove la directory, si rimuovono le informazioni sulle sue autorizzazioni e proprietà.


5

Supponendo bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Con dotglob abilitato, si *espande a tutti i file e directory, anche quelli che iniziano con .- ma non si espande in .e .., quindi è sicuro da usare con rm.


2

se ti trovi nella directory:

cd .. && rm -rf dir && mkdir dir && cd dir

altrimenti:

rm -rf /path/to/dir && mkdir /path/to/dir



1

Che ne dici di usare find. Penso che questa sia generalmente una buona scelta, quando devi scavare tra le sottodirectory.

find . -type f -exec rm {} \;

1
c'è un'opzione -delete, quindi puoi cancellare le directory. (almeno in gnu-find).
utente sconosciuto

questo non eliminerà le sottodirectory
sasha,

-2

Prova rm -rf *?*. Ciò eliminerà i file normali e nascosti.


4
Non in nessuna shell che io conosca.
Gilles 'SO- smetti di essere malvagio' il

hai ragione. non cancella le sottodirectory.
gladimdim,

4
È più probabile che il problema *?*non corrisponda ai file / dir "punto" (a meno che tu non abbia abilitato l' dotglobopzione in bash , l' GLOB_DOTSopzione in zsh o un equivalente per qualunque shell tu stia usando).
Chris Johnsen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.