Я пытаюсь найти способ сканировать всю систему 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.