Find e grep

Eu estou estou usando esse comando para procurar string em arquivos em um servidor Unix, mas me passaram esse comando e eu queria entender melhor o que ele faz, alguém poderia me ajudar?

find . -type f -name '*.*log*'|xargs grep 'StringAProcurar' 

Gostaria de saber para que server cada parte do comando e porque usar o find junto com o grep já que o grep server para fazer busca em arquivos.

find . -type f -name '*.*log*'| xargs grep 'StringAProcurar'

  • find: busca por arquivos dado um diretório
  • .(ponto): diretório atual. Se vc abrir o terminal e acessar o diretório /home/user, . (ponto) é um atalho para /home/user, ou seja, implicitamente é esse diretório.
  • type: para buscar arquivos no find é possível utilizar o comando com algum recursos para alterar o comportamento do comando, como options, tests e actions. type é um test que é usado para limitar o tipo de arquivos que vc quer buscar(diretório ou arquivo comum) por exemplo.
  • f: vc usa juntamente com o test type para dizer que vc quer procurar somente arquivos e não diretórios.
  • -name: permite vc definir um pattern para buscar os arquivos desejados.
  • '*.log': o pattern que vc tá passando para o test -name aplicar na busca. Nesse caso esse wildcard significa qualquer arquivo que tenha a extensão(que termina com) .log.
  • |: find enviará no resultado(a lista de arquivos encontrados) da busca para a standard output, então vc pode usar|(pipe) para redirecionar esse resultado para o standard input de outro comando.
  • xargs: converte o input que for passado via stantard input numa lista de argumentos para utilizar em outro comando.
  • grep 'StringAProcurar': para cada arquivo encontrado, verifica se no conteúdo do arquivo contém o pattern ‘StringAProcurar’.

grep serve para vc verificar se um determinado arquivo contém uma palavra ou padrão textual. grep não busca arquivos.

1 curtida

O grep pode fazer pesquisa em arquivos com a opção -R porem ele vai buscar recursivamente en todos os arquivos no diretório especificado

É + útil usar find para especificar o padrão de nome de arquivo. Mas em vários casos é uma mão na roda (o -R)

Você pode consultar os comandos tambem no site abaixo, basta digita-lo que é mostrado o que cada pedaço faz.

http://explainshell.com