2012-04-29 2 views

ответ

85

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

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

grep -r search * .* 

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

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

grep -r search . 

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

+0

Первый подход работает для меня. Второй подход (grep -r search.) Не нашел строку. Я нашел аналогичные результаты при отсутствии «-r» и поиске только в каталоге верхнего уровня. Я использую GNU grep 2.6.3. – Alan

+0

@ Алан: Это странно. Я использую это регулярно. Вы пробовали его в том же каталоге? – bitmask

+0

Да, да. Кстати, результаты одинаковы, если я использую tcsh или bash. Это 64-разрядная система Debian 5, для чего это стоит. – Alan

2

Может быть, вы предпочитаете сочетать «Grep» с «найти» команды для комплексных решений как

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

Эта команда будет искать внутри скрытые файлы или каталоги для строки «поиск» и список файлов с совпадением с этим формат вывода:

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

./foo/bar:42:search line 
./foo/.bar:42:search line 
./.foo/bar:42:search line 
./.foo/.bar:42:search line 
1

Вы можете захотеть использовать этот подход:

find ~ -name '*' | xargs grep search 

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

find ~ -maxdepth 1 -name '*' | xargs grep search 
0

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

find . -type f | xargs grep search 

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

3

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

grep -r search_string * .[^.]* 
+0

Я не получаю никаких результатов, используя это: 'sudo grep -r ANDROID_HOME *. [^.] *', что я делаю здесь неправильно? – messerbill

+0

@messerbill где вы выполняете поиск? – insaner

0

Для поиска в только все скрытые файлы и каталоги из текущего местоположения:

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

только все скрытые файлы:

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

только все скрытые каталоги: (. GREP -r поиск * *)

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