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 является самым быстрым способом.