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.