LogNotes

2025-05-08 23:33:51
В команде

```bash
find . -type f -name "*.txt" -exec sed -i 's/привет/hello/g' {} +
```

символ `+` в конце после `{}` используется для группового выполнения команды `sed` над несколькими файлами одновременно.

## Что означает `+` в `-exec ... {} +`

- Опция `-exec` в команде `find` позволяет выполнить указанную команду для каждого найденного файла, подставляя имя файла вместо `{}`.
- Если в конце стоит `\;`, то команда запускается отдельно для каждого файла.
- Если в конце стоит `+`, то `find` собирает несколько найденных файлов и передает их одной командой, то есть `sed` будет вызван один раз с несколькими файлами сразу.

Это повышает эффективность, так как сокращает количество запусков команды, особенно при большом количестве файлов.

## Пример

- С `\;`:

```bash
find . -type f -name "*.txt" -exec sed -i 's/привет/hello/g' {} \;
```

`sed` запускается для каждого файла по отдельности.

- С `+`:

```bash
find . -type f -name "*.txt" -exec sed -i 's/привет/hello/g' {} +
```

`sed` запускается один или несколько раз, но каждый раз с группой файлов.

## Итог

`+` в конце `-exec` означает, что команда будет выполнена с группой файлов, а не по одному, что делает выполнение более эффективным и быстрым[13].

Citations:
[1] https://habr.com/ru/companies/ruvds/articles/667490/
[2] https://hepd.pnpi.spb.ru/~shevel/Book/node66.html
[3] https://unixforum.org/viewtopic.php?t=107999
[4] https://losst.pro/komanda-sed-linux
[5] https://www.opennet.ru/docs/RUS/bash_scripting_guide/a14586.html
[6] https://blog.ukrnames.com/administrirovanie/find-sed-awk-v-unix-sistemah
[7] https://kamaok.org.ua/?p=2424
[8] https://lisakov.com/blog/renaming-find-sed-xargs-mv/
[9] https://ru.wikibooks.org/wiki/Sed:_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE
[10] https://www.syrog.ru/news/11/
[11] http://mirtepla.kz/prmery-sed
[12] https://linuxcookbook.ru/articles/komanda-sed-linux
[13] https://wiki.dieg.info/find

---
Answer from Perplexity: pplx.ai/share
← Previous Next →
Back to list