1

Эти три команды делают то же самое?

  • Команда, которая использует grep.

    grep "a" -r .
    
  • Команда, которая использует поиск.

    find .  -exec grep "a" {} \;
    
  • Команда, которая использует grep для поиска через xargs.

    find . | xargs grep "a"
    

3 ответа3

2

Они не одинаковы, и у каждого есть проблемы.

  • Первый не переносимый, так как использует расширение Gnu. Более того, ожидается, что варианты будут перед шаблоном, а не после него.
  • Второй не показывает имя файла, как уже говорилось.
  • Третий сбой, если имена файлов имеют встроенные пробелы или аналогичные.

Я бы использовал вместо этого:

find .  -type f -exec grep a /dev/null {} +

Он переносим, он игнорирует нестандартные файлы, не конфликтует со странными именами файлов и всегда показывает имена файлов при обнаружении шаблона.

0

Вы должны лучше определить "сделать то же самое". Первый запускает одну команду, второй запускает один grep find и fork+exec один раз для каждого найденного файла, а третий запускает минимум три команды - или более, если найдено слишком много файлов для размещения в одной командной строке. Что касается влияния процессора / памяти, то они явно не делают одно и то же - разница между 1, 3 и "целой группой" процессов значительна.

С точки зрения файловой системы, файловая система просматривается, каждый файл оценивается, а затем открывается, полностью читается и закрывается. Таким образом, все они делают одно и то же с этой точки зрения, и файловая система не замечает разницы (за исключением, возможно, более медленного обхода во втором случае из-за накладных расходов, связанных с разветвлением базиллионных процессов).

Выходные данные, отображаемые на экране, различаются, и эту разницу можно определить эмпирически, просто запустив команды с несколькими различными структурами каталогов (один очевидный способ - тот, о котором упоминал redgrittybrick).

Они занимают различное количество времени для ввода из-за количества различных символов и возможностей для синтаксических ошибок.

И так далее. Есть много способов, которыми вещи могут "отличаться". :)

0

Это домашний вопрос?

Ты пробовал их?

Они делают немного разные вещи.

Например, если вы передаете grep одно имя файла, оно не отображает имя файла при выводе. Это может быть неприятно при использовании grep с find .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .