Стала задача посчитать кол-во файлов в поддереве дерикторий начиная с дериктории укзанной с командной строки.
Если есть у кого интерес помочь пишите. буду благодарен, код есть но ни как не могу довести до ума...
|
Стала задача посчитать кол-во файлов в поддереве дерикторий начиная с дериктории укзанной с командной строки.
Если есть у кого интерес помочь пишите. буду благодарен, код есть но ни как не могу довести до ума...
в консоли через комбинацию du и wc не получается? 1 строка текста )
если делать универсальный вариант - ещё + пара строк
можно так: find $directory | wc -l
2 root:
проверила под freebsd: работает!
под дебианом: работает
из того, что просмотрела: в результатах поиска папка тоже занимает 1 строчку.
так что, действительно, результат ошибочен - надо отнять количество подпапок.
Последний раз редактировалось di:); 01.03.2010 в 20:45. Причина: работать-то работает, но есть ошибка.
подсчет всего содержимого каталога (учитываються также "." и "..")PHP код:
#include <dirent.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if(argc == 1) {
printf("./main <foulder>");
return 0;
}
int i = 0;
DIR *listdir = NULL;
listdir = opendir (argv[i]);
while (readdir (listdir))
i++;
printf("%i",i);
return 0;
}
di - почему-то ваша рекомандация не работает.
Последний раз редактировалось rооt; 01.03.2010 в 20:13.
Жизнь в стиле Debian уже отучила меня собирать что-либо самостоятельно
ls -lR $dir | grep '^[-]' | wc -l
похоже на первый вариант, только подпапки не считает - выбирает только файлы
Впрочем если $dir начинается с "-", то и find не сработает
ls -l вывводит в первом столбце атрибуты. У директории на первом месте стоит d, у ссылки l, а вот у файлов именно прочерк.
так что все будет работать
а вот по скорости работы всетаки find будет быстрее )
time ls -lR /etc|grep '^[-]'| wc -l
real 0m0.077s
user 0m0.040s
sys 0m0.052s
time find /etc -type f | wc -l
real 0m0.048s
user 0m0.008s
sys 0m0.040s
Ну тут не совсем верно
Если запустить ls -lR в текущем каталоге, то в первой строке выведется например ./home, т.е. начинаться будет с точки, но никак не с "-"
Если запустить ls -lR /etc/, то начинаться будет со /, т.е. опять же не с "-"
Так что я тут не вижу, в каком случае можно напороться на дефис в названии файла.
Насчет внутренних возможностей - да, это правильно и хорошо их знать, но *nix системы тем и хороши, что одно и тоже действие можно выполнить несколькими способами. Например ls входит в пакет coreutils, которые есть всегда, а вот find'a в нужный момент может не оказаться (чисто теоретически).
Вот простейший пример:
В жизни конечно такое не встречается, т.к. знак "-" активно используется в ключах утилит и его избегают в начале имени файлов/каталогов применять.Код:$ DIR=- $ mkdir $DIR $ ls -lR $DIR | grep '^-' | wc -l 1 (а должно быть 0)
На этом предлагаю завершить эту тему.
Вы привели единственный возможный случай )))
Ну раз тему закрываем, так закрываем
Rector, а у Вас есть опыт работы с Высшими чинами?
Там просто эти команды не нужны.
p.s. да и девушка никак не может обработать голландского клиента
Социальные закладки