Estou pesquisando em um repositório Git e gostaria de incluir a .git
pasta.
grep
não inclui esta pasta se eu executar
grep -r search *
O que seria um comando grep para incluir esta pasta?
Estou pesquisando em um repositório Git e gostaria de incluir a .git
pasta.
grep
não inclui esta pasta se eu executar
grep -r search *
O que seria um comando grep para incluir esta pasta?
Respostas:
Consulte a solução no final desta postagem como uma alternativa melhor para o que você está fazendo.
Você pode incluir explicitamente arquivos ocultos (um diretório também é um arquivo).
grep -r search * .*
O *
irá corresponder a todos os arquivos, exceto os ocultos e .*
irá corresponder apenas aos arquivos ocultos. No entanto, isso falhará se não houver arquivos não ocultos ou arquivos ocultos em um determinado diretório. Você pode, é claro, adicionar explicitamente em .git
vez de .*
.
No entanto, se você simplesmente deseja pesquisar em um determinado diretório, faça assim:
grep -r search .
O .
corresponderá ao caminho atual, que incluirá arquivos ocultos e não ocultos.
.*
incluirá o diretório pai (porque ..
corresponde)
Acabei de encontrar esse problema e, com base na resposta de @ bitmask, aqui está minha modificação simples para evitar o problema apontado por @sehe:
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
que estou fazendo de errado aqui?
Talvez você prefira combinar "grep" com o comando "find" para obter uma solução completa como:
find . -exec grep -Hn search {} \;
Este comando pesquisará dentro de arquivos ou diretórios ocultos pela string "search" e listará quaisquer arquivos que coincidam com este formato de saída:
Caminho do arquivo: Número da linha: linha com coincidência
./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Você pode querer usar essa abordagem, supondo que esteja pesquisando o diretório atual (caso contrário, substitua. Pelo diretório desejado):
find . -type f | xargs grep search
ou se você deseja apenas pesquisar no nível superior (que é mais rápido de testar se você estiver tentando fazer isso):
find . -type f -maxdepth 1 | xargs grep search
ATUALIZAÇÃO: modifiquei os exemplos em resposta aos comentários de Scott. Eu também adicionei "-tipo f".
~
é o diretório inicial do usuário. A pergunta não era sobre o diretório pessoal do usuário, portanto, a resposta não deve ser mencionada ~
. (2) Em um find
comando, -name '*'
é um ambiente autônomo (ou seja, não tem nenhum propósito).
Para pesquisar APENAS todos os arquivos e diretórios ocultos de sua localização atual:
find . -name ".*" -exec grep -rs search {} \;
SOMENTE todos os arquivos ocultos:
find . -name ".*" -type f -exec grep -s search {} \;
SOMENTE todos os diretórios ocultos:
find . -name ".*" -type d -exec grep -rs search {} \;
Para localizar apenas em uma determinada pasta, você pode usar:
ls -al | grep " \."
É um comando muito simples de listar e canalizar para grep.
Além da sugestão de Tyler, aqui está o comando para executar grep em todos os arquivos e pastas recursivamente, incluindo arquivos ocultos
find . -name "*.*" -exec grep -li 'search' {} \;
Para evitar correspondência .
e ..
que não são arquivos ocultos, você pode usar grep
com ls -A
como neste exemplo:
ls -A | grep "^\."
^\.
afirma que o primeiro caractere deve ser .
A opção -A
ou --almost-all
exclui os resultados .
e, ..
portanto, apenas os arquivos e diretórios ocultos são correspondidos.
Você também pode pesquisar tipos específicos de arquivos ocultos, como arquivos de diretórios ocultos:
grep -r --include=*.directory "search-string"
Isso pode funcionar melhor do que algumas das outras opções. As outras opções que funcionaram podem ser muito lentas.