Исключить скрытые подкаталоги из grep -r

У меня есть локальная копия svn, я хочу сделать поиск в строке some_string.

$ grep some_string * -r lang/en:some_string=Some string lang/.svn/en:some_string=Some string 

Но если идти немного дальше, кажется, что скрытые каталоги первого уровня исключены:

 $ cd lang && grep some_string * -r en:some_string=Some string 

Как удалить скрытые директивы svn из моего вывода, а не только с первого уровня глубины?

 $ grep some_string * -r --which_option_here? lang/en:some_string=Some string 

  • sort: write failed | Сломанная труба
  • grep с линиями продолжения
  • grep caret, похоже, не имеет эффекта
  • Как запустить многопоточную grep в терминале?
  • Zero input_file_names в Grep
  • UNIX - команда разбивать файл на несколько файлов со всеми строками для каждых 3 уникальных значений в столбце
  • Создать номер строки / «индекс» в пределах диапазона от начального значения даты
  • Цвет git grep отличается от пользовательских цветов grep
  • 2 Solutions collect form web for “Исключить скрытые подкаталоги из grep -r”

    Используйте параметр --exclude-dir , например:

     grep -r --exclude-dir='.*' some_string 

    От man grep :

     --exclude-dir=DIR Exclude directories matching the pattern DIR from recursive searches. 

    Обратите внимание, что опция --exclude-dir доступна только в GNU grep. Если ваш grep не поддерживает его, вам может понадобиться использовать другой инструмент, например, найти:

     find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \; 

    Обычно я использую это:

     for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.' 

    ${e%\./} удалит первый ./ а затем grep удалит все, что начинается с точки.

    Linux и Unix - лучшая ОС в мире.