Предположим, что начинается с некоторого каталога в файловой системе. В этом базовом каталоге много подкаталогов (не вложенных!). Каждый из подкаталогов содержит произвольное количество файлов.
Как мне найти все каталоги, например, менее 3 файлов внутри с использованием какой-либо команды оболочки? У команды find есть несколько хороших опций для работы с размером файлов, но я не смог найти ничего, что касается количества файлов.
$ find . -type d | while read d; do if [ $(ls -1 "$d" | wc -l) -lt 3 ]; then echo $d; fi; done
Как насчет этого:
for i in `find /etc/ -type d `; do j=`ls -1 $i | wc -l` ; if [ $j -le 3 ]; then echo "$i has about $j file(s)"; fi; done
Вывод:
[root@kerberos ~]# for i in `find /etc/ -type d `; do j=`ls $i | wc -l` ; if [ $j -le 3 ]; then echo "$i has about $j file(s)"; fi; done
/etc/prelink.conf.d has about 0 file(s)
/etc/kdump-adv-conf has about 2 file(s)
/etc/kdump-adv-conf/kdump_initscripts has about 2 file(s)
/etc/kdump-adv-conf/kdump_sample_manifests has about 1 file(s)
/etc/openldap/slapd.d.backup has about 2 file(s)
/etc/openldap/ssl has about 2 file(s)
/etc/foomatic has about 2 file(s)
/etc/gtk-2.0 has about 2 file(s)
/etc/gtk-2.0/x86_64-redhat-linux-gnu has about 2 file(s)
. . . и т.д
Я попытался сделать это с помощью -exec, но мне не хватило терпения, и я просто отправил вывод и проанализировал его.
РЕДАКТИРОВАТЬ: принял к сведению использование Quantas -1 и включил его в мой сценарий, поскольку вы не можете предположить, что вывод будет в одном столбце. Однако я оставил в сценарии оператор «меньше или равно».