Как я могу найти скрытые файлы с помощью grep?

96

Я ищу в репозитории Git и хочу включить .gitпапку.

grep не включает эту папку, если я запускаю

grep -r search *

Какой командой grep можно было бы включить эту папку?

Стивен Пенни
источник

Ответы:

136

Пожалуйста, обратитесь к решению в конце этого сообщения как к лучшей альтернативе тому, что вы делаете.

Вы можете явно включать скрытые файлы (каталог также является файлом).

grep -r search * .*

*Будет соответствовать всем файлам , кроме скрытых из них и .*будет соответствовать только скрытым файлам. Однако это не удастся, если в данном каталоге нет не скрытых файлов или нет скрытых файлов. Вы, конечно, можете явно добавить .gitвместо .*.

Однако, если вы просто хотите выполнить поиск в заданном каталоге, сделайте это так:

grep -r search .

.Будет соответствовать текущему пути, который будет включать в себя как без скрытых и скрытых файлов.

битовая маска
источник
1
Первый подход (grep -r search *. *) Сработал для меня. Второй подход (grep -r search.) Не нашел строку. Я нашел аналогичные результаты, когда опускал "-r" и выполнял поиск только в каталоге верхнего уровня. Я использую GNU grep 2.6.3.
Алан
@ Алан: Это странно. Я использую это регулярно. Вы пробовали это в том же каталоге?
bitmask
27
using .*будет включать родительский каталог (поскольку ..совпадения)
03
1
Безопасно ли обобщать это решение, поскольку поведение может варьироваться в зависимости от оболочки?
astletron
6
для первой версии вы должны добавить --exclude-dir = .., чтобы избежать поиска в родительских папках
user762353
12

Я только что столкнулся с этой проблемой и, основываясь на ответе @ bitmask, вот моя простая модификация, чтобы избежать проблемы, указанной @sehe:

grep -r search_string * .[^.]*
сумасшедший
источник
Я не получаю никаких результатов, используя это: sudo grep -r ANDROID_HOME * .[^.]*что я здесь делаю не так?
messerbill 09
@messerbill где вы выполняете поиск?
insaner
3

Возможно, вы предпочтете объединить «grep» с командой «find» для получения полного решения, например:

find . -exec grep -Hn search {} \;

Эта команда будет искать внутри скрытых файлов или каталогов строку "search" и перечислять любые файлы, совпадающие с этим выходным форматом:

Путь к файлу: Номер строки: строка с совпадением

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Olvathar
источник
2

Вы можете использовать этот подход, предполагая, что вы ищете текущий каталог (в противном случае замените. На желаемый каталог):

find . -type f | xargs grep search

или если вы просто хотите выполнить поиск на верхнем уровне (что быстрее проверить, если вы пробуете это):

find . -type f -maxdepth 1 | xargs grep search

ОБНОВЛЕНИЕ: я изменил примеры в ответ на комментарии Скотта. Я также добавил "-тип f".

Алан
источник
1
(1)  ~- это домашний каталог пользователя. Вопрос не касался домашнего каталога пользователя, поэтому в ответе упоминать не стоит  ~. (2) В  findкоманде -name '*'не используется (т. Е. Бесполезно).
Скотт
1

Для поиска ТОЛЬКО во всех скрытых файлах и каталогах из вашего текущего местоположения:

find . -name ".*" -exec grep -rs search {} \;

ТОЛЬКО все скрытые файлы:

find . -name ".*" -type f -exec grep -s search {} \;

ТОЛЬКО все скрытые каталоги:

find . -name ".*" -type d -exec grep -rs search {} \;
Тайлер Кристиан
источник
1

Все остальные ответы лучше. Это легко запомнить:

find . -type f | xargs grep search

Он находит только файлы (включая скрытые) и ищет каждый файл.

ПрашантБ
источник
0

Чтобы найти только в определенной папке, вы можете использовать:

ls -al | grep " \."

Это очень простая команда для вывода списка и передачи по конвейеру grep.

Питер Мортенсен
источник
0

В дополнение к предложению Тайлера, вот команда для рекурсивного поиска всех файлов и папок, включая скрытые файлы.

find . -name "*.*" -exec grep -li 'search' {} \;
nikhilgoel1985
источник
0

Для предотвращения согласования .и ..которые не скрытые файлы, вы можете использовать grepс ls -Aкак в этом примере:

ls -A | grep "^\."

^\. заявляет, что первый символ должен быть .

Параметр -Aили --almost-allисключает результаты. и ..так , что только скрытые файлы и каталоги совпадают.

mchid
источник
0

Вы также можете искать определенные типы скрытых файлов, например, файлы скрытых каталогов:

grep -r --include=*.directory "search-string"

Это может сработать лучше, чем некоторые другие варианты. Другие сработавшие варианты могут быть слишком медленными.

МИНДСТРЕМА
источник