Я ищу в репозитории Git и хочу включить .git
папку.
grep
не включает эту папку, если я запускаю
grep -r search *
Какой командой grep можно было бы включить эту папку?
Я ищу в репозитории Git и хочу включить .git
папку.
grep
не включает эту папку, если я запускаю
grep -r search *
Какой командой grep можно было бы включить эту папку?
Ответы:
Пожалуйста, обратитесь к решению в конце этого сообщения как к лучшей альтернативе тому, что вы делаете.
Вы можете явно включать скрытые файлы (каталог также является файлом).
grep -r search * .*
*
Будет соответствовать всем файлам , кроме скрытых из них и .*
будет соответствовать только скрытым файлам. Однако это не удастся, если в данном каталоге нет не скрытых файлов или нет скрытых файлов. Вы, конечно, можете явно добавить .git
вместо .*
.
Однако, если вы просто хотите выполнить поиск в заданном каталоге, сделайте это так:
grep -r search .
.
Будет соответствовать текущему пути, который будет включать в себя как без скрытых и скрытых файлов.
.*
будет включать родительский каталог (поскольку ..
совпадения)
Я только что столкнулся с этой проблемой и, основываясь на ответе @ bitmask, вот моя простая модификация, чтобы избежать проблемы, указанной @sehe:
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
что я здесь делаю не так?
Возможно, вы предпочтете объединить «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
Вы можете использовать этот подход, предполагая, что вы ищете текущий каталог (в противном случае замените. На желаемый каталог):
find . -type f | xargs grep search
или если вы просто хотите выполнить поиск на верхнем уровне (что быстрее проверить, если вы пробуете это):
find . -type f -maxdepth 1 | xargs grep search
ОБНОВЛЕНИЕ: я изменил примеры в ответ на комментарии Скотта. Я также добавил "-тип f".
~
- это домашний каталог пользователя. Вопрос не касался домашнего каталога пользователя, поэтому в ответе упоминать не стоит ~
. (2) В find
команде -name '*'
не используется (т. Е. Бесполезно).
Для поиска ТОЛЬКО во всех скрытых файлах и каталогах из вашего текущего местоположения:
find . -name ".*" -exec grep -rs search {} \;
ТОЛЬКО все скрытые файлы:
find . -name ".*" -type f -exec grep -s search {} \;
ТОЛЬКО все скрытые каталоги:
find . -name ".*" -type d -exec grep -rs search {} \;
Чтобы найти только в определенной папке, вы можете использовать:
ls -al | grep " \."
Это очень простая команда для вывода списка и передачи по конвейеру grep.
В дополнение к предложению Тайлера, вот команда для рекурсивного поиска всех файлов и папок, включая скрытые файлы.
find . -name "*.*" -exec grep -li 'search' {} \;
Для предотвращения согласования .
и ..
которые не скрытые файлы, вы можете использовать grep
с ls -A
как в этом примере:
ls -A | grep "^\."
^\.
заявляет, что первый символ должен быть .
Параметр -A
или --almost-all
исключает результаты.
и ..
так , что только скрытые файлы и каталоги совпадают.
Вы также можете искать определенные типы скрытых файлов, например, файлы скрытых каталогов:
grep -r --include=*.directory "search-string"
Это может сработать лучше, чем некоторые другие варианты. Другие сработавшие варианты могут быть слишком медленными.