Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > *nix > Про конвейер в shell |
Автор: alkor 09.09.02, 13:24 |
Господа, у меня следующий вопрос. Сначала я ищу файлы в /usr/lib с расширением *.о: find '/usr/lib' -type f -iname '*.o' | more Затем я хочу послать все это на ввод команды nm, которая читает объектники: find '/usr/lib' -type f -iname '*.o' | nm - ничего не получается - результат такой как будто я ввел просто одну команду безаргументов. Может что-то нетак. Буду очень благодарен подсказкам. Спасибо! |
Автор: makedonskij 09.09.02, 17:22 |
find '/usr/lib' -type f -iname '*.o' -exec nm {} \; 100\% толко что проверил. -exec вызывает для каждого найденного файла nm {} держателль места для каждого найденного файла \; обязателное окончание при -exec '\' маскирует ';' man find |
Автор: borunov 10.09.02, 08:15 |
Способ "find '/usr/lib' -type f -iname '*.o' -exec nm {} \;" хорош, но есть и альтернативный подход, который сработает быстрее на большом количестве файлов за счет того, что "nm" будет вызываться не для каждого аргумента, а для групп аргументов: find '/usr/lib' -type f -iname '*.o' | xargs nm ключевая фишка здесь - прога xargs. Не уверен, что она есть на всех юниксах - отсюда могу проверить только HP-UX 11.0 - работает отлично. По-умолчанию xargs группирует так, чтоб не превысить ARG_MAX и LINE_MAX, но можно в командной строке сказать, по сколько аргументов объединять с помощью опций -n, -l, -x... |