3

Мне нужно использовать средство grep на всем сервере.

Я попробовал следующее:

grep -r 'MyString' / 
grep -r 'MyString' /*

Тем не менее, ни один из них, кажется, не работает. Какие-либо предложения?

6 ответов6

5
sudo find / -type f -exec grep "Strring" {} \;

Вы уверены, что хотите сделать это, хотя? Это будет проходить по всем файловым системам (локальным или нет) и вполне может максимально использовать процессор на вашем сервере.

1
sudo find / -type f -print0 |xargs -0 grep -l 'MyString'
0
cd /
find . | xargs grep MyString

Если вы ищете файлы определенного типа:

find . -name *.java | xargs grep Integer
0

Я второй не подход.

Но если у вас нет прав root, вы получите целую кучу сообщений об отказе в разрешении, перенаправьте их в /dev /null. Тогда вы получите то, что хотите обратно.

 find . / 2>/dev/null | xargs grep MyString 2>/dev/null
0
cd /
grep -R 'your string' *
0

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

$ sudo ack-grep -a 'MyString' /

Опция -a используется для переопределения поведения ack по умолчанию, которое ограничивает поиск типами файлов, о которых он знает. Тем не менее, он по-прежнему исключает некоторые файлы и каталоги, такие как файлы резервных копий, оканчивающиеся на «~», или каталоги управления исходным кодом, например «.svn». Вы можете изменить это поведение, чтобы искать абсолютно все, используя опцию -u .

Чтобы ограничить поиск определенными типами файлов:

$ sudo ack-grep -aG '.*txt' MyString

отмечая, что аргумент -G является регулярным выражением, а не глобусом.

Или для типов файлов, о которых ack уже знает, таких как файлы C++:

$ ack-grep --cpp 'SomeFunctionName'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .