2009-05-02 11 views
22

Tengo un directorio que contiene múltiples subdirectorios. Quiero enumerar solo aquellos subdirectorios que contienen al menos un archivo. ¿Cómo puedo hacer eso?¿Cómo enumerar los subdirectorios no vacíos en Linux?

+0

¿Desea solo directorios que sean subdirectorios inmediatos de su directorio, o * todos * subdirectorios no importa cuán profundamente anidado? – Naaff

+0

si un subdirectorio contiene otros directorios sub-sub pero no archivos, no lo quiero en la lista – Jaelebi

Respuesta

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

le dará todos los directorios no vacíos. Si desea excluir directorios que contienen solo otros directorios (pero no archivos), una de las otras respuestas podría ser mejor ...

+0

Las opciones -mindepth y -maxdepth restringen esto solo a los subdirectorios inmediatos. Ajústelos para afectar a qué nivel se devuelven los resultados. Al dejarlos, encontrarán todos los subdirectorios en cualquier nivel. – Naaff

+0

y recuerda que no es algo de GNU. Para ser portátil, use! en lugar de -no (en realidad, no veo por qué no siempre usarías!) en lugar de -no, ya que -no te da ninguna ventaja en absoluto- – lhunath

+0

¡Porque! parece que debería ser un metacaracter de shell y nunca puedo recordar si tengo que citarlo o no ;-) pero tiene razón acerca de que es más portátil. (Supongo que desde que se aceptó esta respuesta, la sintaxis específica de GNU funciona para el OP) –

3

¿Qué tal:

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

encontrar archivos - nombre de archivo caída de parte - una especie única.

No mostrará los subdirectorios que contienen solo otros subdirectorios secundarios.

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

Sintaxis un poco más corta para lo mismo: buscar. -type f -exec dirname {} \; | ordenar -u –

+0

Lo sentimos mucho. Una cita única incomparable causó la terminación anticipada. Totalmente mi culpa. –

Cuestiones relacionadas