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?
risposta
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 ...
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
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
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) –
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.
find . -type f -print0 | xargs -0 -n 1 dirname | sort -u
Sintassi leggermente più breve per la stessa cosa: find. -tipo f -exec dirname {} \; | sort -u –
Terribilmente dispiaciuto. Una singola quotazione ineguagliabile ha causato la cessazione anticipata. Totalmente colpa mia. –
volevi solo le directory che sono sottodirectory immediati della directory, o * tutte * le sottodirectory no importa quanto profondamente annidato? – Naaff
se una sottodirectory contiene altre sottodirectory ma nessun file, non lo voglio elencato – Jaelebi