Para listar subdiretórios imediatos contendo exatamente $NUM
arquivos.
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 subdiretórios imediatos contendo arquivos maiores 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 listar subdiretórios imediatos contendo menos de $NUM
arquivos.
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}'
Os itens são finalizados com um caractere nulo \0
; portanto, os nomes de arquivos que contêm novas linhas ou outros tipos de espaço em branco serão interpretados corretamente. O %h
imprime cada arquivo de dirname
. awk
depois usa uma matriz para contar quantas vezes encontra cada diretório, imprimindo-o se as condições forem atendidas.
Observe que nenhum dos comandos mencionados acima exibirá diretórios contendo zero arquivos. Observe também que, por arquivo, estou me referindo a arquivos regulares, não a links, diretórios, soquetes, blocos, pipes nomeados, etc.
Eu tentei fazer isso da maneira mais simples possível. Se você deseja encontrar subdiretórios recursivos ou seus arquivos, é necessário um comando modificado. Existem muitas possibilidades para listar todas elas.