it-swarm.it

Come rimuovere tutti i file in una directory?

Sto cercando di rimuovere tutti i file e le sottodirectory in una directory. Ero solito rm -r per rimuovere tutti i file, ma desidero rimuovere tutti i file e sottodirectory, esclusa la directory superiore stessa.

Ad esempio, ho una directory principale come images. Contiene i file header.png, footer.png e una sottodirectory.

Ora voglio eliminare header.png, footer.png e la sottodirectory, ma non images.

Come posso farlo in Linux?

78
poorani

Se la tua directory di livello superiore si chiama images, esegui rm -r images/*. Questo utilizza l'operatore glob Shell * correre rm -r su ogni file o directory all'interno di images.

63
Jordan Lewis

Per eliminare i file nascosti, è necessario specificare:

rm -r images/* images/.*

Con conchiglie i cui globs includono . e .., questo porterà ad un errore come

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

ma eliminerà i file nascosti.

Un approccio senza errori consiste nell'utilizzare find/delete con mindepth. Questo è gnu-find.

find images -mindepth 1 -delete

La tua ricerca potrebbe non avere il -mindepth o -delete predicato, nel qual caso potresti fare:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

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

  • uso ls -Ab per abbinare tutti i file/directory

    cd dir_name && rm -rf `ls -Ab`
    
  • usa find per abbinare tutti i file/directory

    find dir_name -mindepth 1 -delete
    

    oppure, se find non supporta -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • eliminare la cartella, quindi ricrearla

    rm -rf dir_name && mkdir dir_name
    
  • in bash,

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

Per eliminare tutti i file regolari ricorsivamente all'interno di una directory, questo comando (assumendo GNU o FreeBSD find) è abbastanza buono:

find . -type f -delete

Ciò lascia tutti i file non regolari come collegamenti simbolici (che puntino a file regolari o meno), directory, fifo, socket, dispositivi ...

Guarda anche:

find . ! -type d -delete

per eliminare file di qualsiasi tipo tranne directory.

11
amit singh

Prova questa versione:

 rm -r test/*
6
demas

Sto usando il comando find qui:

Passaggio 1: Trova tutti i file ed eliminali:

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

Esempio:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Passaggio 2: Trova tutte le sottodirectory ed eliminale:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

La domanda era svuotare una directory = rimuovere il contenuto di una directory inclusi i file nascosti, ma non la directory stessa. Il comando find con -mindepth 1 è in realtà il modo corretto di procedere, ma per evitare messaggi di errore deve essere unito a -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

la sintassi di rm è:

rm [OPTION]... FILE...

Pertanto, è necessario indicare esplicitamente il percorso appropriato, ad es.

rm -r sub_dir/
0
Zaur Nasibov

Puoi rimuovere la directory usando il seguente comando:

Sudo rm -r directoryname1/2/3/*

Verrà eliminata l'intera directory dopo 3/*.

Esempio Sudo rm -r Download/brano/*

Verranno eliminati tutti i file che si trovano all'interno di Downloads/song.

0

Questo funziona perfettamente per me, testato diverse varianti funzionanti ogni volta.

Dalla directory che contiene la directory delle immagini.

rm -frd ./images/*

prima:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

dopo:

images/
0
deb-linux-user

Per eliminare tutti i file e le sottodirectory nella directory corrente, compresi quelli nascosti, senza messaggio di errore :

rm -rf .[^.] .??* *

Oppure, dalla directory principale:

rm -rf images/.[^.] images/.??* images/*

Da https://serverfault.com/a/47940/269538 .

0
this

Un'altra opzione:

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

fonte: https://askubuntu.com/a/552834/56648

0
Eyal Levin