Esses avisos são direcionados para o fluxo stderr , em oposição ao descritor de arquivo out padrão. Você pode silenciar a saída do stderr adicionando 2>/dev/null ao final do seu comando.
Estou tentando encontrar o diretório de instalação de um pacote específico. Eu tenho uma determinada palavra-chave usando o qual estou tentando encontrar um arquivo específico.
Durante o grep, eu só quero incluir o tipo de arquivo cpp ou h . Eu não quero que o grep mostre avisos como Permissão negada ou Não foi possível encontrar o diretório . Eu só quero que ele exiba arquivos combinados, nada mais. Por favor, sugira como posso fazer isso?
Atualmente estou usando
grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./
Esses avisos são direcionados para o fluxo stderr , em oposição ao descritor de arquivo out padrão. Você pode silenciar a saída do stderr adicionando 2>/dev/null ao final do seu comando.
Mais diretamente do que filtrando os avisos, você pode desativá-los adicionando -s :
grep "My term" -sir --exclude-dir="\.svn" --include=*.{cpp,h} ./
Existem alguns problemas de compatibilidade com esta opção. No entanto, isso não deve ser um problema para uso pessoal.
% bl0ck_qu0te%Eu costumava receber uma tonelada de mensagens irritantes assim:
grep: commands: Is a directory
grep: events: Is a directory
grep: views: Is a directory
O motivo é que o --directories flag é padronizado como read . Eu mudei para recurse ; Se você não quiser fazer automaticamente uma pesquisa recursiva, use skip .
A maneira mais fácil de lidar com isso o tempo todo é configurá-lo em uma variável de ambiente. Em ~/.bash_profile ou ~/.bashrc dependendo da sua distro:
export GREP_OPTIONS='--directories=recurse'
Agora ele automaticamente suprime essas mensagens sempre que eu uso o grep.
Outra opção é o --no-messages flag, taquigrafia -s . Isso também eliminará as mensagens Is a directory , mas também suprimirá outras mensagens que podem ser mais úteis. Por exemplo, se você estiver fazendo uma pesquisa aninhada em */*/* e nenhum arquivo desse padrão existir, isso não será informado.
Ao fazer pesquisas recursivas em arquivos específicos, é muito melhor usar ack-grep . A sintaxe aqui seria:
ack-grep -i "My term" --cpp --h
Para remover as mensagens de erro de permissão, você pode querer executar o mesmo comando com sudo :
ack-grep -i "My term" --cpp --h
Mas, se quiser pesquisar pacotes instalados, veja as várias opções: link
Uma abordagem alternativa em vez de fazer grep recursivamente com -ir seria permitir que o comando find (que é recursivo por padrão) manipule as permissões com -readable sinalizador e caminho para excluir com -not -path "*.svn*" sinalizadores e em seguida, passe o arquivo para grep . A exclusão de diretórios é feita via -type f para localizar apenas arquivos regulares.
$ find . -not -path "*.svn*" -type f -name "*.cpp" -or -name "*.h" -readable -exec grep "my terms" "{}" \;