09.04.2013 14:19, Aleksey Avdeev пишет: > 09.04.2013 13:51, Dmitry V. Levin пишет: >> On Tue, Apr 09, 2013 at 01:14:21PM +0400, Paul Wolneykien wrote: >>> 09.04.2013 10:42, Dmitry V. Levin пишет: >>>> Я посмотрел логи последней тестовой >>>> пересборки, там более 60 >>>> пакетов python*-module-*, в которых используется >>>> for var in $(find >>>> и что-то мне подсказывает (не глядя в >>>> спеки), что все это будет >>>> гораздо лучше работать в форме >>>> find -exec ... + >>> >>> А почему так? "for" же встроенная >>> конструкция, а find -exec наверняка на каждый >>> exec форкает отдельную оболочку. >> >> Если я расскажу, как именно оно происходит, вы же все равно не поверите. >> И правильно сделаете, зачем верить на слово, когда можно проверить >> собственноручно. Сравните >> strace -feexecve -o '|grep -Fc execve' sh -c 'for f in $(find /usr/ -type f -name "*.py"); do ls -- "$f"; done > /dev/null' >> и >> strace -feexecve -o '|grep -Fc execve' sh -c 'find /usr/ -type f -name "*.py" -exec ls -- {} + > /dev/null' >> >> Можете еще и время сравнить: >> time sh -c 'for f in $(find /usr/ -type f -name "*.py"); do ls -- "$f"; done > /dev/null' >> против >> time sh -c 'find /usr/ -type f -name "*.py" -exec ls -- {} + > /dev/null' > > А как на этом фоне конструкции вида: > > find ... | xargs ... > > PS: Интересует экспертная оценка. По strace -feexecve -o '|grep -Fc execve' sh -c 'find /usr/ -type f -name "*.py"|xargs ls -- > /dev/null' time sh -c 'find /usr/ -type f -name "*.py"|xargs ls -- > /dev/null' У меня получилось что вариант "find ... | xargs ..." близок к "find ... -exec ...", но немного затратнее. -- С уважением. Алексей.