LINUX.ORG.RU

Ну, можно одновременно искать директории и кол-ва файлов:

N=10; find -type d -print0 | while read -r -d $'\0' dir; do i=$(( $(ls -la «$dir» | wc -l) - 2 )) && (( $i > $N )) && echo «$dir $i»; done

AITap ★★★★★
()
Ответ на: комментарий от uzbl

Понимаю, что пример довольно синтетический, но:

[23:31:14][aitap@Tarkus /tmp]> mkdir 'zzz " zzz'
[23:31:19][aitap@Tarkus /tmp]> find -type d -exec sh -c '[ $(find «{}» -maxdepth 1 -type f |wc -l) -gt 4 ] && echo {}' \;
.
sh: 1: Syntax error: end of file unexpected (expecting ")")

AITap ★★★★★
()
#!/usr/bin/tclsh
proc recdir {dirs} {
    foreach d $dirs {
        puts "$d : [llength [glob -nocomplain -types f -directory $d *]]"
        recdir [glob -nocomplain -types d -directory $d *]
    }
}
puts ". : [llength [glob -nocomplain -types f *]]"
recdir [glob -nocomplain -types d *]

Выводит рекурсивно список директорий и кол-во файлов в них, начиная с текущей директории. Это так примерчик, скрытые директории и файлы не показывает, лень возиться.

sdio ★★★★★
()
Ответ на: комментарий от AITap

"-aware вариант на shell выходит сильно костыльный; лучше применить нормальный яп:

from subprocess import Popen, PIPE
for i in Popen(["find", "-type", "d"], stdout=PIPE).stdout:
  if Popen(["find", i[:-1], "-maxdepth", "1", "-type", "f"], stdout=PIPE).stdout.read().count("\n") > 10:
    print i[:-1]

uzbl
()
Ответ на: комментарий от geekless

Ну а если есть пробелы в путях, то так:

find /usr/share -type f -printf '%h\n' | sort | uniq -c | awk ' $1 > 40 {print $0}' | sed 's/^ *[0-9]* *//'

geekless ★★
()
Ответ на: комментарий от geekless

хм. в linux работает, BSD-шный find говорит что find: -printf: unknown option.
в любом случае способов много, всем спасибо. тему закрываю.

Komintern ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.