LINUX.ORG.RU

простой вопрос по bash

 


0

2

в общем нужно посчитать общее количество найденных find файлов, решил делать так

c=0

find /usr/share -type f -a -size +4000c -a -size -4002c | while read line ; do
        (( c = c + 1 ))
        echo "$c"
done

echo -e "\n$c"

на выходе получаю 0 файлов, хотя внутри цикла счетчик работает, цикл выполняется в саб шелле?

$ ./test.sh
1
2
3
4

0

в общем нужно найденные файлы перенаправить в файл, а общее количество вывести на консоль, для этого организовал while read line, чтобы считать количество строк на выходе find. Может есть способ проще? кто-нибудь что-нибудь посоветуйте

★★★

Ответ на: комментарий от anonymous

тормозный by-desingn

скорость важна только при ловле блох.

fork-ающийся на каждый чих

мой код выше форкается всего один раз, и то потому, что в ТЗ просили именно find.

emulek
()
Ответ на: комментарий от anonymous

эти специальные случаи не имеют значения ИМХО.

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

мой код выше форкается всего один раз

брешешь же(или не знаешь)

execve("/bin/bash", ["bash", "../test.sh"], [/* 45 vars */]) = 0
...
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f6d27b019d0) = 11181
Process 11181 attached
...
[pid 11181] clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f6d27b019d0) = 11182
Process 11182 attached
...

скорость важна только при ловле блох

чем таким унылым ты на своём локалхосте занимаешься, что там не важна не throughput не latency?

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

оптимизировать на скорость нужно не всё подряд, а только то, где это _реально_ нужно. И в этом деле питоноскрипты не нужны.

emulek
()
Ответ на: комментарий от anonymous

как и shell

безусловно. Но в данной задаче разве важна скорость? Если ты не знал, то львиная доля времени уйдёт на find и её io.

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

как выше уже написали, твой код просто некорректен. у других инструментов же нет проблем с пробелами, \n в именах файлов и пр, и как бонус они не форкаются на каждый чих и работают быстрее

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

в этом конкретном нет. в остальном твоём по-умолчанию есть, тк bash

не ври. Проблемы с пробелами только у совсем новичков и у дебилов.

emulek
()
Ответ на: комментарий от anonymous

и ещё в твоём сишном коде нет переполнений буфера, совсем-совсем

в сишке есть. А в php нет. Откуда вывод…

emulek
()
Ответ на: комментарий от anonymous

это тебе лучше знать. Следуя твоей логике, вывод — программы на php всегда лучше программ на сишке, т.к. в пхп не бывает утечек.

emulek
()
Ответ на: комментарий от anonymous

если важна безопасность, то да. если считать, что в самом php нет уязвимостей

ага, ваше мнение очень важно для нас. А на кого ты работаешь?

emulek
()
Ответ на: комментарий от IvanR

и напечатать это надо не в stdout,а в другой файл, а счетчик вывести в stdout,

″find″, ″tee″ и ″wc -l″ или ″grep -c -z″.

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

точно, совсем забыл про tee, хорошее решение, но уже сделал при помощи for и IFS OIFS

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