LINUX.ORG.RU
Ответ на: комментарий от Irma

ну вроде оно находит, но как записать в тот же файл? файлы как будто правятся, но изменений нет

find /temp/ -name ‘*’ -exec grep -f /root/o.txt ‘{}’ ;

Steh
() автор топика
Ответ на: комментарий от Steh

Не надо писать в тот же файл, это дурной вкус и может породить неожиданные проблемы. Лучше после завершения сделать mv, если нужны те же имена файлов.

Irma ★★★
()
Ответ на: комментарий от Steh

man find

man grep

Гопочат опять же или еще какой помогатель.

Irma ★★★
()
Ответ на: комментарий от Irma

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

-exec sh -c ‘grep -f /root/o.txt <«$0» >«$0.txt»’ {} ;

Steh
() автор топика
Ответ на: комментарий от Irma

проблема была в левых символах в ключах, левые кавычки тоже появлялись после копипаста с Винды. Вот так и работает:

find /temp/ -name ‘*’ -exec sh -c ‘grep -f /root/o.txt <«$0» >«$0.txt»’ {} ;

Steh
() автор топика
Ответ на: комментарий от Steh

Надо посмотреть, не образуется ли пустой файл, если нет совпадений. Я не помню, как оно себя ведет в таких случаях.

Irma ★★★
()
Ответ на: комментарий от Irma

там все норм, ключи были с символами левыми и кривым переносом

Steh
() автор топика
Ответ на: комментарий от Irma

почти норм, первый ключ пропускается, продублировал. Ну мне сойдет, а так странно

Steh
() автор топика
Ответ на: комментарий от Steh

exec нафиг не нужен.

find /temp/ -type f -print0 | xargs -0 grep -Ff file_with_keyword.txt

Эта самая правильная конструкция для поиска в большом числе файлов.

Если число файлов маленькое, то разница с «find -exec» будет незаметной.

vel ★★★★★
()
Ответ на: комментарий от vel

ну так-то можно и -type f указать, но это не мешает

Steh
() автор топика
Ответ на: комментарий от vel

Эта самая правильная конструкция для поиска в большом числе файлов

большом числе файлов

Спорно. Зачем Вы grep на каждый файл форкаете? А ещё если и список шаблонов длинный…

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

У меня все нормально.

strace -f -e trace=process bash -c "find /etc/ -type f -print0 | xargs -0 /usr/bin/echo |wc" 2>&1| grep 'execve('

execve("/usr/bin/bash", ["bash", "-c", "find /etc/ -type f -print0 | xar"...], 0x7ffc7e170a58 /* 58 vars */) = 0
[pid  8389] execve("/usr/bin/find", ["find", "/etc/", "-type", "f", "-print0"], 0x18c7010 /* 57 vars */) = 0
[pid  8390] execve("/usr/bin/xargs", ["xargs", "-0", "/usr/bin/echo"], 0x18c7010 /* 57 vars */ <unfinished ...>
[pid  8391] execve("/usr/bin/wc", ["wc"], 0x18c7010 /* 57 vars */ <unfinished ...>
[pid  8392] execve("/usr/bin/echo", ["/usr/bin/echo", "/etc/gpm-root.conf", "/etc/udev/udev.conf", "/etc/udev/hwdb.bin", "/etc/udev/rules.d/99-mt7921e.rul"...], 0x7fff70c4f698 /* 57 vars */) = 0

find /etc/ -type f -print0 | xargs -0  /usr/bin/echo | wc
   1    2412   69958

find /etc/ -type f -print0 | xargs -0 -n 200 /usr/bin/echo | wc
  12    2412   69958
У тебя по умолчанию n=1 ?

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.