GNU/Linux >> Tutoriales Linux >  >> Linux

Buscar directorios que contengan un cierto número de archivos

Puede probar esto para obtener los nombres de los subdirectorios y la cantidad de archivos/directorios que contienen:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

Si desea hacer lo mismo para todos los subdirectorios (búsqueda recursiva), use esto en su lugar:

find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

Para seleccionar aquellos directorios que tienen exactamente 10 archivos:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
  awk '$NF==10'

10 o más:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
 awk '$NF>=10'

10 o menos:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
 awk '$NF<=10'

Si desea mantener solo el nombre del directorio (por ejemplo, si desea canalizarlo a otro proceso posterior como sugirió @evilsoup), puede usar esto:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; | 
 awk -F"\t" '$NF<=10{print $1}'

Para listar subdirectorios inmediatos que contienen exactamente $NUM archivos.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]==num) printf "%s\n", line}'

Para listar subdirectorios inmediatos que contienen mayor que $NUM archivos.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]>num) printf "%s\n", line}'

Para listar subdirectorios inmediatos que contienen menos que $NUM archivos.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]<num) printf "%s\n", line}'

Los elementos terminan con un carácter nulo \0 , por lo que los nombres de archivo que contienen saltos de línea u otros tipos de espacios en blanco se interpretarán correctamente. El %h imprime el dirname de cada archivo . awk luego usa una matriz para contar cuántas veces encuentra cada directorio, imprimiéndolo si se cumplen las condiciones.

Tenga en cuenta que ninguno de los comandos mencionados anteriormente mostrará directorios que contengan cero archivos. También tenga en cuenta que por archivo me refiero a archivos regulares, no enlaces, directorios, sockets, bloques, canalizaciones con nombre, etcétera.

He intentado hacer esto de la forma más sencilla posible. Si desea encontrar subdirectorios recursivos o los archivos que contienen, se requiere un comando modificado. Hay demasiadas posibilidades para enumerarlas todas.


Prueba esto:

[`encontrar. | wc -l` -eq 10 ] &&echo "Encontrado"

[`encontrar. | wc -l` -gt 10 ] &&echo "Encontrado"

[`encontrar. | wc -l` -lt 10 ] &&echo "Encontrado"

En estos ejemplos, puede verificar si el directorio ACTUAL contiene exactamente 10, más de 10 y menos de 10 archivos/directorios. Si necesita verificar un montón de directorios, simplemente use loop.


Linux
  1. ¿Número de archivos que contienen una cadena determinada?

  2. ¿Reformatear una gran cantidad de archivos Xml?

  3. ¿Número máximo de archivos/directorios en Linux?

  4. ¿Cómo encontrar los directorios más grandes o los archivos más grandes?

  5. du que cuenta el número de archivos/directorios en lugar del tamaño

Buscar comando en Linux (Buscar archivos y directorios)

3 formas de encontrar archivos y directorios en Linux

Encuentre archivos y directorios en Linux fácilmente

Linux:busque el número de archivos en un directorio y subdirectorios

¿Cómo contar el número de archivos en cada directorio?

Forma más rápida de eliminar una gran cantidad de archivos