Я встречаю большую кучу кода, управляемую git, и всякий раз, когда я делаю grep, я вижу груды и груды сообщений формы:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
Есть ли способ, чтобы эти строки исчезли?
Я встречаю большую кучу кода, управляемую git, и всякий раз, когда я делаю grep, я вижу груды и груды сообщений формы:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
Есть ли способ, чтобы эти строки исчезли?
Вы можете использовать флаг -s
или --no-messages
для подавления ошибок.
-s, --no-messages подавляет сообщения об ошибках
grep pattern * -s -R -n
Если вы используете grepping через репозиторий git, я рекомендую вам использовать git grep
. Вам не нужно передавать -R
или путь.
git grep pattern
Это покажет все совпадения из текущего каталога.
Такие ошибки обычно отправляются в поток "стандартной ошибки", который вы можете передать в файл или просто исчезнуть в большинстве команд:
grep pattern * -R -n 2>/dev/null
Я обычно не позволяю grep выполнять рекурсию. Обычно есть несколько каталогов, которые вы хотите пропустить (.git,.svn...)
Вы можете делать умные псевдонимы с такими же позициями:
find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \;
Это может показаться излишним на первый взгляд, но когда вам нужно отфильтровать некоторые шаблоны, это очень удобно.
Пробовали ли вы параметр -0
в xargs? Что-то вроде этого:
ls -r1 | xargs -0 grep 'some text'
Я видел, что это происходит несколько раз, со сломанными ссылками (символическими ссылками, указывающими на файлы, которых не существует), grep пытается выполнить поиск в целевом файле, которого нет (следовательно, правильное и точное сообщение об ошибке).
Обычно я не беспокоюсь при выполнении задач sysadmin над консолью, но изнутри скриптов я ищу текстовые файлы с "find", а затем grep каждый из них:
find /etc -type f -exec grep -nHi -e "widehat" {} \;
Вместо:
grep -nRHi -e "widehat" /etc
Используйте -I
в grep.
Пример: grep SEARCH_ME -Irs ~/logs
.