5

Я запрашиваю определенные каталоги, чтобы увидеть, не нахожу ли я файлы с определенным шаблоном в них, и я пробовал это с двумя различными командами:

Стандартная команда find :

find -L $unix_dir\*/ -maxdepth $maxdepth -name \"$filepattern\"

и замена tree и команды grep :

tree -L $maxdepth -l -i -f $unix_dir*/ | grep '$filepattern'

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

2 ответа2

1

Я бы сказал , что второй один медленнее , как она включает в себя два процесса tree и grep в то время как первый из них имеет только один процесс find

Кроме того, tree записывает имена всех файлов, которые он находит, в свой выходной поток, который затем используется grep . В то же время, find отпечатки только имена подходящих файлов.

При использовании find он пытается сопоставить только имя файла с указанным вами $filepattern . Во втором случае шаблон применяется к полному пути файла. Таким образом, второй случай имеет больше данных для обработки.

 
С другой стороны, горлышком бутылки в этом тесте является дисковый ввод-вывод. И find и tree пройти по каталогам.
Если вы запускаете каждый тест один за другим, ОС будет кэшировать данные о каталогах и именах файлов, поэтому команда будет выполняться быстрее.

0

Команда find записывает больше символов на экран, потому что она всегда записывает полный путь к файлу. Кроме того, сравнение с filepattern может быть более длинным в команде find (зависит от реализации). Например, с псевдокодом:

  • находить

    • Извлечь имя файла
    • Сравните имя файла с filepattern
  • дерево

    • Сравните имя файла с filepattern

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