elimina le sottocartelle senza eliminare la cartella principale


15

Per questo tipo di struttura dir:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

So che posso usare rm -rf /config/filesgroupsper eliminare la cartella principale e tutte le sottocartelle ...

ma voglio eliminare solo /filegroupA, /filegroupBe così via, e non cancellare/config/filegroups


13
C'è qualche problema a usare rm -rf / config / filesgroups / *?
— dsmsk80,

3
O forse anche rm -rf /config/filegroups/filegroups{A,B}?
— Drav Sloan,

@dsumsky Di default bashnon include '.' cartelle nell'espansione del percorso. Quale può essere o non essere desiderato. Io lo faccio shopt -s dotglobin .bashrca sistemare le cose. Solo una nota a margine che qualcuno potrebbe trovare utile;).
— Miroslav Koškár,

Qualcuno ha funzionato per te? Se è così, ti dispiacerebbe accettare una risposta, al fine di aiutare gli altri (come me) che vogliono fare la stessa cosa?
— Mawg dice di ripristinare Monica il

rm -rf /*farà;) --- seriamente non farlo
— Muhammad Umer,

Risposte:


28
rm -rf /config/filegroups/*

Se si desidera eliminare solo le directory (e i collegamenti simbolici alle directory), lasciando /config/filegroupsintatti tutti i file , è possibile utilizzare una barra finale:

rm -rf /config/filegroups/*/

Se vuoi eliminare anche le directory con nomi che iniziano con a ., supponendo che tu abbia una bash abbastanza recente, dovresti usare l'opzione shell dotglob:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

e per favore non che non funzionerà per rm -rf "/ config / filegroups / *"
— Ilya Yevlampiev il

5

Ciò eliminerà tutti i file e le directory /config/filegroupsinclusi i file e le directory "nascosti" (nomi che iniziano con .).

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Se i nomi di file o directory contengono spazi, devi farlo in questo modo:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bonus: puoi prima controllare cosa verrà eliminato in questo modo:

find /config/filegroups -mindepth 1 -maxdepth 1

Se vuoi conservare determinati file o directory puoi farlo in questo modo:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

C'è qualche motivo per non usare findl' -deleteopzione?
— evilsoup,

4
-deletesi rifiuta di eliminare le directory non vuote. -maxdepthsostituisce -depth, necessario -deleteper eliminare le directory non vuote. Senza di -maxdepthte non puoi vedere facilmente quali directory verranno eliminate perché elenca anche i file all'interno delle directory. Non usare -maxdepthsignifica anche che non puoi usare facilmente filtri come -name. -deleteElimina inoltre le directory eliminando prima tutti gli oggetti all'interno, il che può richiedere molto tempo se si tratta di un albero grande e profondo.
— lesmana,

4

Preferisco usare findcon -exec, che renderebbe la tua chiamata qualcosa del genere:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;

-2

Se sei già nella cartella puoi semplicemente digitare rm -rf ./**

Così:

cd /config/filesgroups
rm -rf ./**

Questo è un modello glob per eliminare tutte le sottocartelle dal percorso locale.

./riferendosi alla cartella locale ... e **per tutte le cartelle sottostanti ...


1
Quale cartella e perché `**` `
— RalfFriedl,

1
Sarebbe esattamente lo stesso rm -rf ./*, tranne per il fatto che è probabile che vengano visualizzati messaggi diagnostici su "Nessun file o directory" se non si utilizza -fil comando (poiché la directory più in alto verrebbe eliminata in modo ricorsivo prima che il suo contenuto venga elaborato di rm).
— Kusalananda
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.