Чтобы перечислить непосредственные подкаталоги, содержащие именно $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}'
Чтобы перечислить непосредственные подкаталоги, содержащие больше, чем $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}'
Для того, чтобы перечислить немедленные подкаталоги , содержащие меньше , чем $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}'
Элементы завершаются нулевым символом \0
, поэтому имена файлов, содержащие символы новой строки или другие типы пробелов, будут интерпретироваться правильно. %h
Печатает каждый файл dirname
. awk
затем использует массив, чтобы подсчитать, сколько раз он встречает каждый каталог, распечатывая его, если выполняются условия.
Обратите внимание, что ни одна из вышеупомянутых команд не будет отображать каталоги, содержащие ноль файлов. Также обратите внимание, что под файлом я имею в виду обычные файлы, а не ссылки, каталоги, сокеты, блоки, именованные каналы и так далее.
Я пытался сделать это как можно проще. Если вы хотите найти рекурсивные подкаталоги или файлы в них, требуется измененная команда. Есть слишком много возможностей, чтобы перечислить их все.