Я пытаюсь найти конкретную строку текста в файле где-нибудь на моем жестком диске. Лучшее, которое я придумал до сих пор:
find -type f / | xargs cat | grep "string to find"
Но это просто говорит мне, существует ли строка где-нибудь или нет.
Как я могу знать, в каком файле я нашел его?
Существует ли лучший путь?
find / -type f -exec grep "string" {} +
Это выполнит поиск без учета регистра, который будет медленнее, но более гибким:
find / -type f -exec grep -i "string" {} +
можно получить много результатов, таким образом, можно передать его по каналу к меньше, затем используйте f и b для навигации вперед и назад постранично через вывод:
find / -type f -exec grep -i "string" {} + | less
Если Вы знаете, что ищете *.txt
файлы, можно совершенствовать его еще больше:
find / -type f -name "*.txt" -exec grep -i "string" {} + | less
Это должно добиться цели и намного более просто:
grep -R "some string" /
добавление-n покажет Вам номера строки, Вам нужно это:
grep -Rn "some string" /
Почему использование 'кошка' вообще в этом случае? Я всегда нахожу это нечетным, как люди используют 'кошку' ни по какой причине вообще. Просто сделайте:
find -type f / | xargs grep "string to find"
Конечно, поиск каждого файла на Вашем всем диске будет довольно медленным. Вы - вероятно, более обеспеченное использование некоторой программы индексации, если Вы должны для поиска как это часто. Например, Гончая является довольно обширной поисковой системой, это было вокруг некоторое время. Другие опции являются Strigi KDE или Поиском по компьютеру Google
По крайней мере необходимо использовать, 'располагаются' вместо 'находки', она только индексирует имена файлов и не их содержание, но это все еще ускорит вещи. Кроме того, необходимо отфильтровать на основе типа файла перед использованием grep. Например, с помощью grep на 100 МБ avi файл или что-то - просто пустая трата времени.
Как я могу знать, в каком файле я нашел его?
Необходимо использовать'-H
'опция с'grep
'для печати файла соответствия.
Кроме того,
/
').John
схема -exec
переключитесь'|
'оператор поможет, когда у Вас будет много искавших файлов/
. Также стоит сказать это при выполнении поиска, начинающего с /
как обычный пользователь, Вы собираетесь закончить с тонной сообщений об ошибках из-за проблем полномочий.
– Telemachus
07.11.2009, 00:01
Да, grep с флагом-r будет искать рекурсивно. Попробуйте команду как:
grep -ri 'hello' .
Который будет искать текущий каталог, и каждый файл и каталог в нем, для фразы 'привет'. Флаг-i делает это независимым от случая, таким образом, это также найдет "Привет", "ПРИВЕТ", и т.д.