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