Выбор ответа Middle grep, sed, awk, find, xargs обновлено
-exec {} \; против -exec {} +
Вопрос
Чем отличаются find . -name '*.log' -exec gzip {} \; и find . -name '*.log' -exec gzip {} +?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Первый запускает gzip на каждый файл, второй пачками. С \; будет один процесс на файл: при 100 тысячах файлов это 100 тысяч fork и exec.
Варианты ответа
- Первый запускает
gzipна каждый файл, второй пачкамиправильный ответ - Второй вариант запускает
gzipпараллельно на всех ядрах - Первый вариант ломается на именах файлов с пробелами
- Никакой разницы:
+это короткий синоним\;
Разбор
С \; будет один процесс на файл: при 100 тысячах файлов это 100 тысяч fork и exec. С + find собирает аргументы до лимита длины командной строки, как xargs. Параллельности нет ни там, ни там (её даёт xargs -P). С пробелами в именах оба варианта безопасны, потому что find передаёт имена как отдельные аргументы без shell.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.