Мы хотим сканировать слова на нашей машине с Gnu/Linux. Простой способ, например, с grep

grep -r "some_word" /var

Однако в случае, если мы хотим сканировать всю файловую систему, мы не можем сделать только grep -r "some_word" /, потому что сканируются файлы в /proc (они должны быть исключены). Поэтому я хочу знать, есть ли какие-нибудь полезные инструменты для сканирования для этой цели?

Я знаю, что в gnu grep - у нас есть вариант --exclude-dir, но я все еще хочу знать лучший способ поиска слов в файловой системе Gnu/Linux.

0
Jeff Schaller 5 Янв 2022 в 19:57

2 ответа

Лучший ответ
find / -path /sys -prune -o -path /proc -prune -o -type f -exec grep -r "some_word" {} \;

Я верю, что это то, что вы хотите

2
Alex 5 Янв 2022 в 14:53
Если вы используете find, нет необходимости указывать grep -r; просто используйте grep
 – 
roaima
6 Янв 2022 в 18:58

Утилита find может оставаться в пределах одной файловой системы, если вы используете ее с опцией -xdev. Это означает, что команда

find / -xdev -type f -exec grep -w -F 'word' {} +

... останется в корневой файловой системе и не уйдет в /sys или /proc.

В корневой файловой системе он будет передавать пакеты имен файлов в grep для поиска слова word.

Если у вас есть другие смонтированные файловые системы, которые вы также хотите найти, просто укажите их как пути поиска верхнего уровня. Например, если разделы /home и /tank смонтированы отдельно, и вы хотите найти их,

find / /home /tank -xdev -type f -exec grep -w -F 'word' {} +

Предикат -xdev является стандартным и должен быть доступен в большинстве, если не во всех, реализациях find.

2
they 5 Янв 2022 в 18:13