2009-05-02 15 views
22

Ho una directory contenente più sottodirectory. Voglio elencare solo quelle sottodirectory che contengono almeno un file. Come lo posso fare?Come elencare sottodirectory non vuote su linux?

+0

volevi solo le directory che sono sottodirectory immediati della directory, o * tutte * le sottodirectory no importa quanto profondamente annidato? – Naaff

+0

se una sottodirectory contiene altre sottodirectory ma nessun file, non lo voglio elencato – Jaelebi

risposta

39
find . -mindepth 1 -maxdepth 1 -not -empty -type d 

vi darà tutte le directory non vuote. Se si desidera escludere le directory che contengono solo altre directory (ma nessun file), una delle altre risposte potrebbe essere migliore ...

+0

Le opzioni -mindepth e -maxdepth limitano questo solo alle sottodirectory immediate. Regolare questi per influenzare a quale livello vengono restituiti i risultati. Lasciandoli fuori troverai tutte le sottodirectory a qualsiasi livello. – Naaff

+0

e ricorda che -non è roba GNU. Per essere portatili, usare! invece di -not (davvero; non vedo perché non useresti sempre solo! invece di -non, visto che -non ti dà alcun vantaggio) – lhunath

+0

Perché! sembra che dovrebbe essere un metacarattere della shell e non potrò mai ricordare se devo citarlo o meno ;-) ma hai ragione sul fatto che sia più portabile. (Suppongo che poiché questa risposta è stata accettata, la sintassi specifica per GNU funziona per l'OP) –

3

ne dite:

find /nominated/directory -type f | 
sed 's%/[^/]*$%% | 
sort -u 

Trova file - nome del file goccia parte - specie in modo univoco.

Non elencherà le sottodirectory che contengono solo altri sotto-sottodirectory.

5
find . -type f -print0 | xargs -0 -n 1 dirname | sort -u 
+0

Sintassi leggermente più breve per la stessa cosa: find. -tipo f -exec dirname {} \; | sort -u –

+0

Terribilmente dispiaciuto. Una singola quotazione ineguagliabile ha causato la cessazione anticipata. Totalmente colpa mia. –

Problemi correlati