Skip to content

henriquedcmonteiro/Apropos_find_xargs_grep

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Localizar um texto em um diretório que não sabemos onde esta.

Passo 1 - Localizando um comando com apropos.


- O comando apropos serve para localizar um comando que você não lembra a sintaxe por meio de palavras-chave que descrevam a funcionalidade que este comando teria.

- Estamos procurando um comando que encontre uma pasta especifica.

Passo 1

- Dependendo do sistema precisa-se atualizar o cache para o comando apropos funcionar corretamente, o comando é "mandb".

- Procuramos o comando find que localiza arquivos em uma hierarquia de diretórios.
- Mas antes o que significa este (1) a frente do comando find?

Passo 3

- Utilizando o comando man man (que seria o manual do próprio manual do linux), encontramos a descrição do tipo de função que determinada palavra teria caso tivesse determinado numero envolto do ().

- Desta forma procuramos comandos executáveis, que correspondem ao número 1, que nosso comando find possui.

- Por exemplo, poderíamos possuir os mesmos comandos derivativos do find, como find-lib(5) find-ker(9), mas apenas precisamos obter comandos executáveis, para isso utilizaríamos a seguinte flag abaixo junto ao comando apropos.

- Os comandos find-lib e find-ker não existem, apenas os mencionei a título ilustrativo.

Passo 2

- Utilizaremos a flag -s acompanhada do número da sessão que buscamos, nesse caso a sessão (1) destinada para comandos executáveis.

- O comando ficaria: apropos -s 1 search

Passo 4

- Note que a filtragem ficou relativamente menor, pois agora o apropos só nos passa a sessão que escolhemos.

Passo 2 - Utilizando o comando find

- Agora que sabemos qual comando utilizar para encontrar um arquivo ou diretório, vamos entender separadamente como construir um comando find.

- Para este exemplo estamos procurando uma pasta chamada arquivos.

- Não fazemos ideia de onde se localiza a pasta em questão, apenas sabemos seu nome e que ela é um diretório. Para localizá-la podemos utilizar o seguinte raciocínio:

- Para se encontrar uma caneta perdida em um quarto, primeiro precisamos entrar neste quarto. O comando find segue esta mesma analogia.

- Em sua sintaxe começamos com o comando find (diretório de pesquisa), no nosso exemplo, pegaremos desde o diretório / + a flag -name que será onde colocaremos o nome do diretório que estamos buscando, que por sua vez é o diretório arquivos.

- Nosso comando então seria: find / -name "arquivos"

Passo 5

- Aqui falaremos de dois pontos distintos, o primeiro é o caractere "?" e o segundo é a saída do nosso comando.

- O caractere ?, podemos chamar de caractere coringa, ele tem a função de encontrar ou não qualquer caractere somente naquela posição. Por exemplo, caso tivéssemos a dúvida se a pasta se chama "arquivos" ou "arquivo" no singular, poderíamos utilizar o caractere coringa que nos daria qualquer carácter ou nenhum após a palavra arquivo.

- O segundo ponto é a saída do comando, notamos que temos dois resultados, mas por que isso? Porque deveríamos especificar o tipo de arquivo que queremos encontrar, caso contrário podemos tanto ter a saída de arquivos regulares, especiais ou diretórios.

- Para resolver isso é simples, basta passar a flag -type seguido do parâmetro d de "directory".

- Encontramos finalmente o nosso diretório, mas e se agora precisa-se ainda achar um trecho de texto de código dentro deste diretório que pudesse, por exemplo, ser um erro?

Passo 3 - Utilizando o comando grep

- O comando grep é a chave para esta busca, ele sozinho poderia resolver a nossa tarefa tanto através do caminho absoluto quanto do relativo.

- Caminho absoluto é aquele que é declarado desde a raiz do sistema identificado pelo / até o local a onde deseja-se ir.

- Já o caminho relativo é aquele que parte do diretório que nos encontramos atualmente.

- Neste exemplo criamos várias pastas e arquivos, e cada arquivo com seus textos dentro do diretório "/tmp/arquivos". Para localizar o arquivo em questão, escrevi em um desses documentos a palavra "achou".

- Podemos resolver este problema da seguinte forma: utilizando o comando grep + a flag -r (recursivo) + a palavra em questão "achou" + o caminho do diretório, absoluto ou relativo.

- Desta forma o nosso comando seria: grep -r "achou" /tmp/arquivos/

- Poderíamos ter a solução desta forma, entretanto, usaríamos dois comandos diferentes quando podemos usar apenas uma linha de código.

Passo 4 - Utilizando o comando grep, xargs e pipes

- Utilizaremos o nosso comando find, utilizando a saída dele como um argumento para um novo input.

Passo 7

- Vamos falar a partir do nosso pipe representado pelo "|". O que estamos querendo passar com o nosso comando, é mais simples do que aparenta.

- Nós pegaremos o output do primeiro comando que é find / -type -name arquivo? Concatenando esta saída em um novo argumento com as junções da | + o comando xargs. O resto do comando grep segue a mesma lógica descrita acima.

- Desta forma o nosso comando fica: find / -d -name arquivo ? | xargs grep -r "achou"

- Em um resumo mais simplificado, estamos pegando a saída do comando find que seria o caminho /tmp/arquivos/ e estamos concatenando com o comando grep, e quem faz esta ponte entre ambos os comandos transformando a saída em um argumento é a junção da barra pipe | com o comando xargs.

- Este comando procuraria recursivamente a partir do diretório /tmp/arquivos/ todos os arquivos existentes dentro dele que contem a palavra "achou". Sendo a nossa saída: "/tmp/arquivos/pasta3/achou.txt:achou".

Passo 5 - Resumo

- Com o comando apropos, podemos achar um comando que não conhecemos por meio de palavras-chave, utilizar o comando find para encontrar um arquivo ou diretório e juntamente com o grep podemos achar dentro deste diretório, trechos de códigos que nos interessem.

About

How to find a command with apropos. Using find to locate a directory and use grep with pipe and xargs for redirecting an output as a command.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published