Выбор ответа Middle grep, sed, awk, find, xargs обновлено

-exec {} \; против -exec {} +

Вопрос

Чем отличаются find . -name '*.log' -exec gzip {} \; и find . -name '*.log' -exec gzip {} +?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Первый запускает gzip на каждый файл, второй пачками. С \; будет один процесс на файл: при 100 тысячах файлов это 100 тысяч fork и exec.

Варианты ответа

  1. Первый запускает gzip на каждый файл, второй пачкамиправильный ответ
  2. Второй вариант запускает gzip параллельно на всех ядрах
  3. Первый вариант ломается на именах файлов с пробелами
  4. Никакой разницы: + это короткий синоним \;

Разбор

С \; будет один процесс на файл: при 100 тысячах файлов это 100 тысяч fork и exec. С + find собирает аргументы до лимита длины командной строки, как xargs. Параллельности нет ни там, ни там (её даёт xargs -P). С пробелами в именах оба варианта безопасны, потому что find передаёт имена как отдельные аргументы без shell.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.