Eu quero procurar uma seqüência de texto em todos os arquivos em um diretório (e não em seus subdiretórios; sei que a -r
opção faz isso, mas não é isso que eu quero).
Corrida
grep "string" /path/to/dir
é suposto ser capaz de fazer isso, eu li, mas isso me dá o erro:
grep: dir: é um diretório
Em seguida, tentei executar
grep
em vários arquivos.grep "string" .bashrc .bash_aliases
funciona perfeitamente.grep "string" .bash*
funciona como pretendido também.grep "string" *
me dá os erros:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
Apenas os erros são impressos, não recebo as linhas correspondentes. Eu tentei usar a -s
opção, mas sem sucesso.
Então, minhas perguntas:
Por que não consigo usar
grep
em um diretório, como em (1), quando devo fazê-lo? Eu já vi isso em vários exemplos na Internet.
Edit : Quando digo "usando grep em um diretório", quero dizer "pesquise em todos os arquivos desse diretório, exceto seus subdiretórios". Eu acredito que é isso que o grep faz quando você passa um diretório para ele no lugar de um arquivo. Estou incorreto?Por favor, me dê uma explicação sobre o funcionamento
grep
que explicaria o comportamento dos comandos em (2).
Editar : Deixe-me ser mais específico. Por que o uso de curingas para especificar vários arquivos para procurar trabalho com.bash*
e não com*
ou mesmo./*
?Como posso pesquisar todos os arquivos em um diretório (e não seus subdiretórios) usando
grep
?
grep "string" .bash*
.
grep "string" * .* 2>/dev/null
ougrep -s "string" * .*
*
, conhecido como globbing. Globbing não inclui nomes de arquivos que começam com um ponto.bashrc
como o padrão. Você pode definir opções de shell para incluir esses arquivos, mas poderá ficar um pouco confuso se não souber o que está fazendo. Um bom guia para a compreensão globing pode ser encontrada aqui mywiki.wooledge.org/glob