Domanda Come rimuovere tutti i file da una directory?


Il più vicino che ho ottenuto è

# rm /path/to/directory/*.*

ma questo non funziona per i file che non hanno un'estensione ...


205
2017-09-06 07:58


origine




risposte:


Linux non usa estensioni. Spetta al creatore del file decidere se desidera che il nome abbia un'estensione. Linux guarda il 1 ° byte per capire che tipo di file ha a che fare.

Per rimuovere tutto in una directory, utilizzare:

rm /path/to/directory/*

Puoi usare il -r opzione, ad esempio:

rm -r /path/to/directory/* 

rimuovere anche eventuali sottodirectory (insieme a tutto il loro contenuto) all'interno della directory in cui si rimuove il contenuto di. Altrimenti mostrerà un errore che informa che non sta rimuovendo la directory.


235
2017-09-06 08:06



Se vuoi anche eliminare i file nascosti, esegui shopt -s dotglob prima di correre rm (...) - danjjl
I significati all files ;) *.* significa tutti i file contenenti a . da qualche parte nel nome - Rinzwind
@Rinzwind, più precisamente, l'asterisco significa "zero o più di qualsiasi carattere". Così *a* significa zero o più caratteri, seguito da a seguito da zero o più caratteri. Corrisponderebbe ai nomi dei file happy, apple, a o la. - DisgruntledGoat
@ user784637 sei troppo facilmente impressionato - barlop
Ecco il comando che vuoi: rm - * - anon58192932


  • 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 vuoi assicurarti che anche i file / directory nascosti vengano rimossi.

  • Per rimuovere tutti i "file" dall'interno di una cartella (non rimuovendo le cartelle interne):

    rm -f /path/to/directory/{*,.*}
    

Dove:

  • rm - sta per "rimuovere"
  • -f - sta per "vigore"che è utile quando non si desidera essere richiesto / richiesto se si desidera rimuovere un archivio, ad esempio.
  • -r - sta per "ricorsivo"il che significa che vuoi andare ricorsivamente in ogni cartella e rimuovere tutto.

126
2017-09-07 17:26



Ho trovato questa risposta più completa e utile, oltre alla risposta contrassegnata come accettata. - inspirednz
rm -rf /path/to/directory/* non rimuove un file nascosto nella cartella, ad es. .htaccess. Può essere rm -rf /path/to/directory/.? Non l'ho provato - Mark Berry
@MarkBerry rm -rf /path/to/directory/.* - Lilian A. Moraru
@ LilianA.Moraru, ho fatto alcuni test oggi. rm -rf /path/to/directory/.* elimina solo i file nascosti nella directory specificata. Osservando il commento di @ danjjl sulla risposta di @ Rinzwind, per eliminare anche i file nascosti, esegui shopt -s dotglob prima di correre rm -rf /path/to/directory/*. - Mark Berry
ATTENZIONE: 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, NON inviare il comando rm -rf /path/to/directory/.* a meno che non abbiate eseguito il backup dell'intero computer in una posizione separata / sicura! - lawlist


Per rimuovere tutti i file nella directory (inclusi i file nascosti e le sottodirectory) eseguire:

rm -rf /path/to/directory/{*,.*}

30
2017-11-23 09:38



Questa dovrebbe essere la bella risposta accettata. Grazie! - Nam G VU
Non corrisponde a questo glob "." e anche? - hertzsprung
@hertzsprung - lo fa, e ti darà un avvertimento che non può cancellare ./ e ../, ma cancellerà comunque i file nascosti. - Ryan Wheale
Questo non funziona sulla console Mac, i file nascosti sono ancora lì con quella riga di comando. - agapitocandemor


Se si desidera eliminare solo i file in / path / to / directory, è possibile 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 è possibile elencare ciò che viene trovato senza convogliare rm in modo da poter vedere ciò che verrà eliminato prima di iniziare.


8
2017-09-06 12:13



GNU find come un -delete predicato. Se vuoi ancora usarlo -exec, sostituendo \; con + si riuniranno rm chiama insieme, aumentando l'efficienza. - enzotib
una grande quantità di file con '+' causerà problemi, poiché l'elenco sarà troppo grande, come rm -f *. e quando si rimuovono grandi quantità di file dalla stessa cartella (parlando in milloni) entrambi non sono buoni :) Alla fine C ++ è arrivato e ha rimosso i file in ordine di inode in dir-tree. - Osis
Dovresti davvero aggiungere un - dopo il rm. Senza di ciò se si hanno nomi di file -rf o simili verranno interpretati come argomenti in rm. per esempio. xargs -0 rm - o -exec rm - {} \; - Richm
puoi anche fornire l'argomento -n a xargs. Questo farà sì che divida i comandi rm con un numero massimo di argomenti, ad esempio "xargs -n 100 -0 rm -" rimuoverà file in blocchi di 100. - Richm
È inoltre possibile aggiungere -maxdepth 1 per assicurarsi che find non restituisca file da qualsiasi sottodirectory. cioè trova / percorso / su / directory -maxdepth 1 -tipo f - Richm


Se si desidera rimuovere anche tutte le sottodirectory e la directory stessa, è possibile utilizzare rm -rf /path/to/directory. Ma controlla sempre la tua linea prima di premere return, rm -rf può anche causare un sacco di havock, ad es. se accidentalmente inserisci uno spazio dopo la prima barra mentre hai i permessi di superutente ...


6
2017-09-07 08:51





Per cancellare tutti i file e le directory (incluso il file nascosto quelli) 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 per escludere la directory dir_name stesso.
Dai un'occhiata al seguente link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


5
2017-11-27 16:05



Grazie per il tuo consiglio e ho aggiunto ulteriori spiegazioni per i collegamenti. - zeekvfu
Fai attenzione, poiché l'eliminazione e la ricreazione della cartella potrebbero comportare permessi diversi / errati per questa cartella! - einjohn


Puoi cd nella directory e quindi eseguire il comando rm *.* proprio come in DOS se ricordi.


1
2018-05-01 00:59



DOS è DEL per i file e RMDIR per le directory svuotate- e i file nascosti e di sistema devono avere prima rimosso gli attributi ATTRIB. Non altrettanto semplice;) - Eric