Я шукаю в сховищі 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 {} \;
Ця команда буде шукати в прихованих файлах або каталогах рядок "пошук" та перераховувати будь-які файли, що збігаються з таким вихідним форматом:
Шлях до файлу: Номер рядка: рядок із збігом
./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.
На додаток до пропозиції Тайлера, ось команда для рекурсивного grep-файлу всіх файлів і папок, включаючи приховані файли
find . -name "*.*" -exec grep -li 'search' {} \;
Для запобігання узгодження .
і ..
що не приховані файли, ви можете використовувати grep
з ls -A
як в цьому прикладі:
ls -A | grep "^\."
^\.
стверджує, що першим символом повинен бути .
-A
Або --almost-all
варіант виключає результати .
і ..
так , що тільки приховані файли і каталоги збігаються.
Ви також можете шукати певні типи прихованих файлів, наприклад, для прихованих файлів каталогів:
grep -r --include=*.directory "search-string"
Це може працювати краще, ніж деякі інші варіанти. Інші варіанти, які працювали, можуть бути надто повільними.