Il più vicino che ho ottenuto è
# rm /path/to/directory/*.*
ma questo non funziona per i file che non hanno un'estensione ...
Il più vicino che ho ottenuto è
# rm /path/to/directory/*.*
ma questo non funziona per i file che non hanno un'estensione ...
Risposte:
Linux non utilizza estensioni. Spetta al creatore del file decidere se desidera che il nome abbia un'estensione. Linux osserva il primo byte per capire con quale tipo di file ha a che fare.
Per rimuovere tutto in una directory utilizzare:
rm /path/to/directory/*
È possibile utilizzare l' -r
opzione, ad esempio:
rm -r /path/to/directory/*
per rimuovere anche eventuali sottodirectory (insieme a tutto il loro contenuto) all'interno della directory di cui si sta rimuovendo il contenuto. Altrimenti mostrerà un errore che ti informa che non sta rimuovendo la directory.
all files
;) *.*
indica tutti i file che contengono un punto .
nel nome
*a*
significa zero o più caratteri, seguito da a
seguito da zero o più caratteri. Sarebbe abbinare i nomi dei file happy
, apple
, a
o la
.
Per rimuovere la cartella con tutto il suo contenuto ( comprese tutte le cartelle interne ):
rm -rf /path/to/directory
Per rimuovere tutto il contenuto della cartella ( comprese tutte le cartelle interne ) ma non la cartella stessa:
rm -rf /path/to/directory/*
o
rm -rf /path/to/directory/{*,.*}
se si desidera assicurarsi che anche i file / le directory nascosti vengano rimossi.
Per rimuovere tutti i "file" dall'interno di una cartella ( non rimuovere le cartelle interne ):
rm -f /path/to/directory/{*,.*}
Attenzione : se hai spazi nel tuo percorso, assicurati di usare sempre le virgolette.
rm -rf /path/to the/directory/*
equivale a 2 rm -rf
chiamate separate :
rm -rf /path/to
rm -rf the/directory/*
Per evitare questo problema, puoi usare '
virgolette singole '
( non espande le variabili della shell) o "
virgolette doppie "
( espande le variabili della shell):
rm -rf "/path/to the/directory/"*
Dove:
rm
- sta per " rimuovi "-f
- sta per " forza " che è utile quando non si desidera che venga richiesto / richiesto se si desidera rimuovere un archivio, ad esempio.-r
- sta per " ricorsivo ", il che significa che si desidera andare in modo ricorsivo in ogni cartella e rimuovere tutto.rm -rf /path/to/directory/*
non rimuove un file nascosto nella cartella ad es .htaccess
. Forse rm -rf /path/to/directory/.
? Non l'ho provato.
rm -rf /path/to/directory/.*
elimina solo i file nascosti nella directory specificata. Guardando il commento di @ danjjl sulla risposta di @ Rinzwind, per eliminare anche i file nascosti, esegui shopt -s dotglob
prima di eseguire rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
sul mio sistema ha causato la cancellazione di elementi in /path/to
. Fortunatamente, avevo appena eseguito il backup di tutti i miei dati su un disco separato. Inutile dire che NON emettere il comando a rm -rf /path/to/directory/.*
meno che non sia stato eseguito il backup dell'intero computer in una posizione separata / sicura!
Per rimuovere tutti i file nella directory (inclusi i file nascosti e le sottodirectory) eseguire:
rm -rf /path/to/directory/{*,.*}
./
e ../
, ma eliminerà comunque i file nascosti.
rm -r $(pwd)/{*,.*}
Se vuoi eliminare solo i file nella directory / path / to / puoi farlo
find /path/to/directory -type f -print0| xargs -0 rm
o
find /path/to/directory -type f -exec rm '{}' \;
Puoi fare carichi con find
, il vantaggio è che puoi elencare ciò che viene trovato senza eseguire il piping in rm
modo da poter vedere cosa verrà eliminato prima di iniziare.
GNU find
come -delete
predicato. Se si desidera ancora utilizzare -exec
, la sostituzione \;
con +
raccoglierà le rm
chiamate, aumentando l'efficienza.
Per eliminare tutti i file e le directory (inclusi quelli nascosti ) in una directory, puoi provare quanto segue:
eliminare la cartella, quindi ricrearla
rm -rf dir_name && mkdir dir_name
uso find
find dir_name -mindepth 1 -delete
Qui specifichiamo -mindepth 1
di escludere la directory dir_name stessa.
Dai un'occhiata al seguente link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Se si desidera rimuovere anche tutte le sottodirectory e la directory stessa, è possibile utilizzare rm -rf /path/to/directory
. Ma ricontrolla sempre la tua linea prima di premere rm -rf
Invio , può anche causare un sacco di confusione, ad esempio se inserisci accidentalmente uno spazio dopo la prima barra mentre hai le autorizzazioni del superutente ...
Poiché questa domanda è costantemente al top di Google quando cerco questo da solo:
Le altre risposte soffrono di diversi problemi:
Alcuni di essi includono .
e ..
che è rumoroso, confuso e fastidioso.
Alcuni dimenticano i file nascosti (file che iniziano con un punto).
Non vengono eliminati in un ordine (il più profondo) corretto per consentire l'eliminazione della directory.
Discendono in altri file system (montati), che spesso sono indesiderati.
Sono difficili da estendere correttamente con parametri extra (più su quello sotto).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Si noti che ho aggiunto un -xdev
argomento per impedire la discesa in mount (come /proc
ecc.).
-depth
o -delete
?Nonostante la gente mi voti costantemente per questo, questi metodi hanno un rovescio della medaglia: non sembra che siano abbastanza estensibili per consentire la -prune
creazione di una sottodirectory (senza introdurre più problemi). Contrariamente a questo metodo, è possibile inserire
-not \( -path "${DIR}/subdir" -prune \)
prima -mindepth
dell'argomento da escludere subdir
dall'aver cancellato il suo contenuto.
-depth
bandiera find
per quello.
-delete
confind
? -delete
è il primo in profondità. Stai già assumendo non POSIX find
con il -printf
, quindi potresti anche usare -delete
o-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... ma il mio funziona? Perché?
shopt -s dotglob
prima di eseguirlorm (...)