Como procurar uma palavra em todo o conteúdo de um diretório no linux

14

precisa pesquisar algo em todo o conteúdo

Estou tentando:

find . | xargs grep word

Eu recebo erro:

xargs: unterminated quote

Como conseguir isso?

    
por xyz 21.09.2011 / 11:25

6 respostas

13

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

Se o seu grep suportar a opção -r ou -R para pesquisa recursiva, use-a.

grep -r word .

Caso contrário, use o -exec primary de find . Essa é a maneira usual de obter o mesmo efeito que xargs , exceto sem restrições em nomes de arquivos. Versões razoavelmente recentes de find permitem agrupar vários arquivos em uma única chamada para o comando auxiliar. Passar /dev/null para grep garante 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 {} +

Versões antigas de find (em sistemas mais antigos ou OpenBSD, ou utilitários reduzidos como o BusyBox) só podem chamar o comando auxiliar em um arquivo de cada vez.

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

Algumas versões de find e xargs têm extensões que permitem que elas se comuniquem corretamente, usando caracteres nulos para separar os nomes de arquivos, de modo que nenhuma citação seja necessária. Atualmente, apenas o OpenBSD possui esse recurso sem ter -exec … {} + .

find . -type f -print0 | xargs -0 grep word /dev/null
    
por 22.09.2011 / 02:03
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

ls recursiva, para pesquisar arquivos que correspondam

ls -lR | grep "your_search"
    
por 21.09.2011 / 11:30
2

Se você tiver as ferramentas GNU (o que você faz se a tag do Linux for precisa), então você pode usar -print0 e -0 para contornar os problemas habituais de citação:

find . -type f -print0 | xargs -0 grep word
    
por 21.09.2011 / 11:43
0

Há também ack , ele foi projetado para ignorar diretórios especiais como .svn , .git e outros. É uma ferramenta diária para desenvolvedores.

É muito próximo de para as opções comuns.

:

ack -r string .

Pacote ack-grep no debian & debian gosta.

    
por 09.11.2013 / 22:27
0

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

 grep -irl root .
    
por 09.11.2013 / 20:12
-1

Eu acho que você quer encontrar uma string em arquivos

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

    
por 21.09.2011 / 11:44