logo

Encontre o comando no Linux/Unix com exemplos

O comando find nos ajuda a encontrar um arquivo específico dentro de um diretório. Ele é usado para encontrar a lista de arquivos para várias condições, como permissão, propriedade do usuário, modificação, data/hora, tamanho e muito mais.

Em sistemas operacionais do tipo Unix e outros, o comando find é um utilitário de linha de comando que localiza arquivos com base em alguns formatos especificados pelo usuário e imprime o nome do caminho de todos os objetos correspondentes ou, se outras ações forem solicitadas, implementa essa ação em todos os objetos correspondentes.

Ele inicia uma busca a partir de um local desejado e, em seguida, percorre recursivamente os diretórios (nós) de uma estrutura hierárquica (geralmente uma árvore). O comando find pode pesquisar e percorrer diferentes sistemas de partição de arquivos pertencentes a um único ou mais dispositivos de armazenamento no diretório inicial.

O formato de pesquisa contém um padrão para correspondência com o nome do arquivo ou o intervalo de tempo para correspondência com o horário de modificação ou horário de acesso ao arquivo. O comando find fornece uma lista de todos os arquivos no diretório de trabalho atual por padrão. No entanto, os usuários podem restringir a pesquisa a um nível máximo desejado no diretório inicial.

Os programas de localização associados aplicam um banco de dados de arquivos indexados obtido do comando fino para fornecer uma técnica mais rápida de pesquisa em todo o sistema de arquivos por nome.

O utilitário find vem por padrão com a maioria dos Distribuições Linux , portanto não precisamos instalar nenhum pacote adicional. É um dos comandos mais essenciais e utilizados do Linux sistema.

 find 

As duas opções determinam como o find deve considerar os links simbólicos. A natureza padrão é nunca buscar links simbólicos. A bandeira, ou seja, -EU , levará a descoberta a buscar links simbólicos. A bandeira, ou seja, -H , irá apenas buscar links simbólicos enquanto continua com os argumentos da linha de comando. Os sinalizadores são mencionados no padrão POSIX para o comando find. Uma extensão básica é um sinalizador, ou seja, -P , para desabilitar explicitamente o link simbólico a seguir.

Pelo menos um caminho deve antecipar a expressão. O comando find pode interpretar curingas internamente, e os comandos devem ser cuidadosamente citados para gerenciar o globbing do shell.

Os componentes da expressão são isolados pelo limite do argumento da linha de comando, geralmente indicado como espaço em branco na sintaxe do shell. Eles são considerados do lado esquerdo para o lado direito. Eles podem incluir componentes lógicos como OR e AND, bem como predicados (ações e filtros). GNU find contém vários outros recursos não mencionados pelo POSIX.

Os seguintes símbolos são usados ​​para especificar o diretório:

(.) : Para o nome do diretório atual

(/) : Para o diretório raiz

Breve história do comando Find

O comando find ocorreu na versão 5 Unix como um elemento do Bancada de trabalho do programador projeto e foi especificado por Dick Haight com cpio, que foram desenvolvidos para serem usados ​​em conjunto.

Originalmente, a implementação GNU do comando find foi especificada por Eric Decker . Mais tarde, foi desenvolvido por David MacKenzie, Tim Wood , e Jay Plett . Além disso, o comando find foi portado para o sistema operacional IBM i.

multiplexador dois para um

Predicados

As primárias amplamente utilizadas são:

    padrão de nome:Ele verifica se o nome do arquivo é igual ao padrão shell-glob fornecido ou não.-tipo tipo:Ele verifica se o arquivo é do tipo fornecido.-imprimir:Sempre dá o verdadeiro valor. Ele imprime o nome do arquivo atual e uma nova linha no stdout.-imprimir0:Sempre dá o verdadeiro valor. Ele imprime o nome do arquivo atual e um caractere nulo no stdout. Não é necessário pelo POSIX.-exec programa [argumento ...];:Sempre dá o verdadeiro valor. Ele executa um programa com os argumentos fornecidos fixos e o caminho do arquivo atual.-exec programa [argumento ...] { } +:Sempre dá o verdadeiro valor. Ele executa um programa com os argumentos fixos fornecidos e tantos caminhos quanto possível. Para quase todas as implementações, outras ocorrências {} significam cópias extras do nome fornecido (aspecto não necessário para POSIX).-ok programa [argumento...];:É o mesmo que -exec, mas retornará falso ou verdadeiro se o programa fornecer 0.

Encontre padrões para implementar -print caso as condições sejam verdadeiras se a expressão não utilizar nenhum de -ok, -exec, -print ou -print0.

Operadores

Os operadores aprimoram as expressões do comando find. Eles são mencionados em ordem decrescente de precedência:

    (expr):Este operador pode forçar a precedência.! expr:Se expr retornar falso, ele retornará verdadeiro.
  • expr1 expr2 (ou expr1 -a expr2 : AND. expr2 não é avaliado se expr1 for falso.
  • expr1 -o expr2: OU. expr2 não é avaliado se expr1 for verdadeiro.

Exemplos do comando find

Vejamos os seguintes exemplos do comando find:

Encontre arquivos por nome

Podemos pesquisar todos os arquivos que terminam com a extensão ‘.txt’. Para fazer isso, execute o comando abaixo:

 find . -name '*.txt' 

O comando acima listará todos os arquivos de texto do diretório de trabalho atual. Considere a saída abaixo:

Linux Encontrar

Na saída acima, todos os arquivos com extensão '.txt' são listados com o comando find.

número do palíndromo

Encontrando arquivos por tipo

O parâmetro '-type' é usado para especificar o tipo de arquivo.

Alguns dos tipos de arquivo são os seguintes:

  • f: arquivo normal
  • d: diretório
  • l: links simbólicos
  • c: dispositivos de personagem
  • b: bloquear dispositivos

Considere o comando abaixo:

 find . -type d -name '*.bak' 

O comando acima listará todos os diretórios com extensão ‘.bak’. Considere a saída abaixo:

Linux Encontrar

Na saída acima, o comando 'find . -type d -name '*.bak' está exibindo todos os diretórios que terminam com '.bak'.

Encontre arquivos mais recentes

O parâmetro '-newer' auxilia na busca de arquivos mais recentes que o arquivo mencionado. Considere o comando abaixo:

 find . -newer msg.txt 

O comando acima exibirá todos os arquivos mais recentes que 'msg.txt' do diretório de trabalho atual. Considere a saída abaixo:

Linux Encontrar

Na saída acima, todos os arquivos exibidos são mais recentes que o arquivo ‘msg.txt’.

Encontre e exclua um arquivo

A opção '-delete' é usada para excluir um arquivo específico. Precisamos ter muito cuidado ao usar este comando porque não há opção de desfazer se ele for executado uma vez. Considere o comando abaixo:

 find . -name Demo.txt -delete 

O comando acima excluirá o arquivo ‘Demo.txt’ do diretório de trabalho atual. Considere a saída abaixo:

Linux Encontrar

Encontre um diretório

A opção 'type -d' é usada para encontrar um diretório. Considere o comando abaixo:

 find . type -depth -name Newdirectory 

O comando acima encontrará o local ‘Newdirectory’. Considere a saída abaixo:

Linux Encontrar

Encontre arquivos por hora de modificação

A opção '-mtime', seguida do número de dias, é usada para localizar os arquivos por modificação. O número de dias pode ser positivo ou negativo. O valor negativo será usado para menos do que -1 é usado para o último dia e, da mesma forma, +1 encontrará o arquivo há mais de um dia. Considere o comando abaixo:

diagrama uml java
 find ./Newdirectory -mtime -1 

O comando acima encontrará os arquivos que foram modificados no último dia. Considere a saída abaixo:

Linux Encontrar

Encontre arquivos com permissão

A opção '-perm' é usada para localizar arquivos com permissão. Execute o comando find com a opção '-perm' e passe o valor necessário. Considere o comando abaixo:

 find ./ -perm 777 

O comando acima listará os arquivos do diretório especificado que todos podem ler, escrever e executar.

Encontre e substitua arquivos

Para localizar e substituir arquivos, temos que combinar o comando find com o comando sed. Para operar em arquivos, use a opção '-exec' com o comando find. Considere o comando abaixo:

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

do comando acima, a ocorrência especificada será substituída. Considere a saída abaixo:

Linux Encontrar

Encontre texto em vários arquivos

Podemos fazer outra combinação do comando find com o comando grep para localizar o texto dos vários arquivos. Considere o comando abaixo:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

O comando acima encontrará as linhas contendo o texto ‘demo’ de todos os arquivos de texto dentro do diretório ‘Newdirectory’. Considere a saída abaixo:

Linux Encontrar

Na saída acima, podemos ver que as linhas com o texto 'demo' foram exibidas.

Pesquise todos os diretórios

 $ find / -name file1 -type f -print 

O comando acima encontra todos os diretórios de um arquivo normal cujo título é arquivo1 e o imprime na tela. Geralmente, não é uma boa ideia pesquisar arquivos dessa forma. Pode levar um bom tempo. Portanto, é melhor mencionar o diretório. Alguns sistemas operacionais podem montar sistemas de arquivos (dinâmicos) que não são favoráveis ​​ao comando find. Nomes de arquivos mais complicados contendo caracteres exclusivos do shell podem precisar ser fechados entre aspas simples.