Исключить скрытые подкаталоги из 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 

  • Grep для поиска каталогов для шаблонов внутри текстового файла
  • Как фильтровать контент между определенными ключевыми словами с помощью grep?
  • Справка Grep regex нужна
  • Что означает выражение Grep?
  • Разбор C-стиля Многострочный комментарий
  • Есть ли опция / команда для дифференциации файлов на основе состояния копии файла в каталоге?
  • Совпадение всех шаблонов из файла сразу
  • Как подсчитать количество слов каждого предложения в файле с помощью команды оболочки?
  • 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 - лучшая ОС в мире.