Para enumerar 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 enumerar subdirectorios inmediatos que contienen archivos mayores que $NUM
.
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 enumerar subdirectorios inmediatos que contienen menos de $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 líneas nuevas u otros tipos de espacios en blanco se interpretarán correctamente. Las %h
impresiones de cada archivo dirname
. 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 mostrará directorios que contengan cero archivos. También tenga en cuenta que por archivo me refiero a archivos normales, no a enlaces, directorios, tomas, bloques, tuberías con nombre, etc.
He tratado de hacer esto de la forma más simple posible. Si desea encontrar subdirectorios recursivos o los archivos que contiene, se requiere un comando modificado. Hay demasiadas posibilidades para enumerarlos a todos.