Я намагаюся знайти спосіб сканувати всю мою систему Linux на всі файли, що містять певний рядок тексту. Просто для уточнення, я шукаю текст у файлі, а не у назві файлу.
Коли я шукав, як це зробити, я натрапив на це рішення двічі:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Однак це не працює. Здається, відображається кожен окремий файл у системі.
Це близький до належного способу це зробити? Якщо ні, то як мені? Це вміння знаходити текстові рядки у файлах було б надзвичайно корисним для деяких програм програмування, якими я займаюся.
-H
на -l
(а може, grep
на fgrep
). Щоб виключити файли з певними шаблонами імен, ви б використовували find
більш досконалий спосіб. Хоча варто навчитися користуватися find
, хоча. Просто man find
.
find … -exec <cmd> +
легше набирати та швидше, ніж find … -exec <cmd> \;
. Він працює, лише якщо <cmd>
приймає будь-яку кількість аргументів імені файлу. Економія часу на виконання особливо велика, якщо <cmd>
почати повільно, як сценарії Python або Ruby.
grep "pattern" path/*.txt
.
як символічний знак, що складається з одного символу. Моя порада - завжди використовувати або fgrep, або egrep.