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?

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

+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"

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

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.



-1

Eu acho que você quer encontrar uma string nos arquivos

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.