LINUX.ORG.RU

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

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

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

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

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

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

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

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

vel ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()