12 июня 2011 г. 18:56 пользователь Vadim Goncharov
<vadimnucli...@tpu.ru> написал:
>>> Чушь. На одно звено больше
> Ну и зачем мне сравнение xargs совсем не с тем, что я написал?
>
> --
> WBR, Vadim Goncharov

Для особо одарённых:

root@jason:~# cp -r /usr/src/ /mnt/garbage/temp/test/
root@jason:~# cp -r /usr/ports/ /mnt/garbage/temp/test/
root@jason:~# du -hs /mnt/garbage/temp/test/
3,8G    /mnt/garbage/temp/test/
root@jason:~# find /mnt/garbage/temp/test/ -type f | wc -l; find
/mnt/garbage/temp/test/ -type d | wc -l
  246195
   74201
root@jason:~# time find /mnt/garbage/temp/test/ -type f -exec chmod 644 {} \;
43.793u 163.871s 4:05.06 84.7%  24+816k 0+0io 0pf+0w
root@jason:~# time find /mnt/garbage/temp/test/ -type d -exec chmod 755 {} \;
13.784u 53.809s 1:38.88 68.3%   26+858k 0+0io 0pf+0w
root@jason:~# /usr/bin/time find /mnt/garbage/temp/test/ -type f
-print0 | xargs -0 chmod 644 && /usr/bin/time find
/mnt/garbage/temp/test/ -type d -print0 | xargs -0 chmod 755
       31,53 real         0,54 user         4,07 sys
       41,31 real         0,56 user         3,94 sys

Как мы видим, в данной задаче find/exec работал 339 секунд, а
find/xargs - 73 секунды. Следовательно, find/xargs отработал в 4
(четыре) раза быстрее. Иногда лучше жевать (с)
find /path -exec $command - n вызовов command, find /path -print0 |
xargs -0 - 1 (всего один!) вызов command.
ЗЫЖ Во второй раз пришлось использовать /usr/bin/time вместо builtin
time потому, что builtin time не понимает команды, в которых есть
пайп.

И ещё:
root@jason:~# time chmod -R u+rwX,go+rX,go-w /mnt/garbage/temp/test/
0.486u 3.913s 0:36.45 12.0%     10+1537k 0+810io 0pf+0w

Как видим, chmod работает в 9 раз быстрее find/exec и в 2 раза быстрее
find/xargs.
Так что, как ни крути - chmod является самым быстрым способом.

Ответить