Como procurar uma palavra no conteúdo inteiro de um diretório no linux

15

precisa procurar algo em todo o conteúdo

Eu estou tentando:

find . | xargs grep word

Eu recebo erro:

xargs: cotação não terminada

Como conseguir isso?

xyz
fonte

Respostas:

15

xargsespera entrada em um formato que nenhum outro comando produz, por isso é difícil de usar com eficiência. O que está errado aqui é que você tem um arquivo cujo nome deve ser citado na entrada de xargs(provavelmente contendo a ').

Se o seu grep suportar a opção -rou -Rpara pesquisa recursiva, use-a.

grep -r word .

Caso contrário, use o -execprimário de find. Essa é a maneira usual de obter o mesmo efeito que xargs, exceto sem restrições nos nomes dos arquivos. Versões razoavelmente recentes do findpermitem agrupar vários arquivos em uma única chamada para o comando auxiliar. Passar /dev/nullpara grepgarante que ele mostrará o nome do arquivo na frente de cada correspondência, mesmo que seja chamado em um único arquivo.

find . -type f -exec grep word /dev/null {} +

As versões mais antigas do find(em sistemas mais antigos ou no OpenBSD, ou em utilitários reduzidos como o BusyBox) só podem chamar o comando auxiliar em um arquivo por vez.

find . -type f -exec grep word /dev/null {} \;

Algumas versões finde xargstêm extensões que permitem a comunicação correta, usando caracteres nulos para separar nomes de arquivos, para que nenhuma citação seja necessária. Hoje em dia, apenas o OpenBSD possui esse recurso sem ter -exec … {} +.

find . -type f -print0 | xargs -0 grep word /dev/null
Gilles 'SO- parar de ser mau'
fonte
+1 especialmente para /dev/null. É um incômodo quando o formato de saída pode variar, dependendo de quantos arquivos são correspondidos ... obrigado.
Peter.O
12

Eu acho que você quer dizer a primeira opção

grep recursivo, para pesquisar conteúdo dentro de arquivos

grep -R "content_to_search" /path/to/directory

É recursivo, para pesquisar arquivos que correspondam

ls -lR | grep "your_search"
Feida Kila
fonte
grep -rin para recursiva-case_insensitive-show_line_number
Quero poder pesquisar no conteúdo de cada arquivo.
o primeiro retorna qualquer ocorrência em qualquer arquivo, especificando o arquivo onde a ocorrência foi encontrado
2

Se você possui as ferramentas GNU (o que você faz se a tag Linux for precisa), poderá usar -print0e -0solucionar os problemas comuns de cotação:

find . -type f -print0 | xargs -0 grep word
mu é muito curto
fonte
0

Também ack , ele foi projetado para pular diretórios especiais como .svn,.git e tal. É uma ferramenta diária para desenvolvedores.

É bem perto do para os switches comuns.

Ex. :

ack -r string .

Pacote ack-grepsobre curtidas debian e debian.

Gilles Quenot
fonte
0

No diretório atual, você pode usar o grep:

 grep -irl root .
Ranjithkumar T
fonte
-1

Eu acho que você quer encontrar uma string nos arquivos

Experimentar find . -name "*" | xargs grep -l "string"


fonte
A mensagem de erro de xargs ("Cotação não terminada") significa que o OP possui um arquivo. que tem uma citação no nome. Sua linha também vai coaxar nisso. Como mu observou, você precisa de uma terminação diferente.
thiton