Я пытаюсь найти строку "rGEO"
в каталоге, используя следующие команды:
find . -name "*" -type f -print | xargs grep "rGEO"
./home/oper1/AgencyTape/geo/exe/gngeo.cmd:${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail
В этом случае я возвращаю имя файла с соответствующей строкой, а также строку, соответствующую приведенной выше строке.
find . -name "*" -type f -exec grep "rGEO" {} \;
В этом случае я возвращаюсь:
${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail
Файл, содержащий строку, не печатается, и, как вы можете видеть, между двумя выходными данными есть большая разница.
Использование xargs
дает более четкий и точный вывод.
Мой вопрос: в чем разница между двумя командами? Мне кажется, что они выполняют одну и ту же логику, но получают разные результаты.
xargs
вызывает команду пакетами, аfind -exec
вызывает команду один раз для каждого результата, что делаетxargs
быстрее. - person Adam Katz   schedule 13.02.2016find -exec
практически идентиченfind -print0 |xargs -0n1
, поскольку-n1
обеспечивает один вызов для каждого результата. - person Adam Katz   schedule 13.02.2016