Come rimuovere tutti i file da una directory?

224

Il più vicino che ho ottenuto è

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

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

    
posta user784637 06.09.2011 - 09:58

9 risposte

262

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, usa:

rm /path/to/directory/*

Puoi utilizzare l'opzione -r , 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 informa che non sta rimuovendo la directory.

    
risposta data Rinzwind 06.09.2011 - 10:06
134
  • Per rimuovere la cartella con tutti i suoi contenuti ( comprese tutte le cartelle interne ):

    rm -rf /path/to/directory
    
  • Per rimuovere tutti i contenuti della cartella ( incluse 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 siano rimossi.

  • Per rimuovere tutti i "file" da una cartella ( non rimuovendo cartelle interne ):

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

Dove:

  • rm - sta per " remove "
  • -f - sta per " force " che è utile quando non vuoi essere richiesto / richiesto se vuoi rimuovere un archivio, ad esempio.
  • -r - sta per " ricorsivo " che significa che vuoi andare ricorsivamente in ogni cartella e rimuovere tutto.
risposta data Lilian A. Moraru 07.09.2011 - 19:26
34

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

rm -rf /path/to/directory/{*,.*}
    
risposta data Leonid V. Fedorenchik 23.11.2014 - 10:38
8

Se vuoi eliminare solo i file in / path / to / puoi farlo

find /path/to/directory -type f -print0| xargs -0 rm 

o

find /path/to/directory -type f -exec rm '{}' \;

Puoi eseguire carichi con find , il vantaggio è che puoi elencare ciò che viene trovato senza eseguire il piping su rm in modo da poter vedere ciò che verrà eliminato prima di iniziare.

    
risposta data Richard Holloway 06.09.2011 - 14:13
6

Se vuoi rimuovere anche tutte le sottodirectory e la directory stessa, puoi usare 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 con autorizzazioni di superutente ...

    
risposta data Tobias Kienzler 07.09.2011 - 10:51
6

Per eliminare tutti i file e le directory (compresi quelli nascosti ) in una directory, puoi provare quanto segue:

  • elimina la cartella, quindi ricreala

    rm -rf dir_name && mkdir dir_name
    
  • usa find

    find dir_name -mindepth 1 -delete  
    

Qui specifichiamo -mindepth 1 per escludere la directory dir_name stesso.
Dai un'occhiata al seguente link: link

    
risposta data zeekvfu 27.11.2013 - 17:05
1

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

    
risposta data V K Mavani 01.05.2013 - 02:59
0

Per eliminare la directory corrente, potresti ad esempio utilizzare rm -d ./*

-d dice di cancellare anche le directory.

    
risposta data arviman 29.08.2017 - 09:17
-1

Dal momento che questa domanda è costantemente in cima a Google quando cerco personalmente:

Le altre risposte soffrono di diversi problemi:

  1. Alcuni di questi includono . e .. che è rumoroso, confuso e fastidioso.

  2. Alcuni di essi dimenticano i file nascosti (file che iniziano con un punto).

  3. Non eliminano in un ordine corretto (più profondo) per consentire l'eliminazione delle directory.

  4. Scendono in altri file system (montati), che è spesso indesiderato.

  5. Sono difficili da estendere correttamente con parametri aggiuntivi (maggiori informazioni in seguito).

Quindi, per RECENTIVAMENTE cancellare tutti i file e le cartelle in una directory, fai questo:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p
-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Tieni presente che ho aggiunto un argomento -xdev per impedire la discendenza nei montaggi (come /proc ecc.).

Perché non -depth o -delete ?

Nonostante la gente mi metta continuamente a discapito per questo, quei metodi hanno uno svantaggio: non sembra che siano abbastanza estensibili da permettere a -prune di entrare in una sottodirectory (senza introdurre più problemi). In contrasto con questo metodo, è possibile inserire

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p
-not \( -path "${DIR}/subdir" -prune \)
" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

prima dell'argomento -mindepth per escludere subdir dall'avere eliminato il contenuto.

    
risposta data Mehrdad 21.05.2018 - 02:54

Leggi altre domande sui tag