Per elencare le sottodirectory immediate contenenti esattamente i $NUM
file.
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}'
Per elencare le sottodirectory immediate contenenti file maggiori di $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}'
Per elencare le sottodirectory immediate contenenti meno di $NUM
file.
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}'
Gli elementi sono chiusi da un carattere null \0
, quindi i nomi dei file che contengono nuove righe o altri tipi di spazi bianchi verranno interpretati correttamente. Il %h
stamperà ogni file di dirname
. awk
quindi utilizza un array per contare quante volte incontra ogni directory, stampandola se le condizioni sono soddisfatte.
Notare che nessuno dei suddetti comandi visualizzerà directory contenenti zero file. Si noti inoltre che per file mi riferisco a file regolari, non a collegamenti, directory, socket, blocchi, named pipe, eccetera.
Ho provato a farlo nel modo più semplice possibile. Se si desidera trovare sottodirectory ricorsive o i relativi file, è necessario un comando modificato. Ci sono troppe possibilità per elencarle tutte.