How to Find Files in Linux Using the Command Line

find é um comando para filtrar recursivamente objectos no sistema de ficheiros baseado num mecanismo condicional simples. Use find para procurar por um ficheiro ou directório no seu sistema de ficheiros. Usando a bandeira -exec, os ficheiros podem ser encontrados e imediatamente processados dentro do mesmo comando.

Localizar ficheiros Linux por nome ou extensão

Utilizar find a partir da linha de comando para localizar um ficheiro específico por nome ou extensão. O exemplo seguinte procura por *.err ficheiros no directório /home/username/ e todos os subdirectórios:

find /home/username/ -name "*.err"

Deverá ver uma saída semelhante no seu console:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Comandos e Sintaxe Comum de Encontrar Linux

O comando find geralmente assume a seguinte forma:

find options starting/path expression
  • O atributo options controla o comportamento e método de optimização do processo find.
  • O atributo starting/path define o directório de nível superior onde find começa a filtragem.
  • O atributo expression controla os testes que pesquisam a hierarquia de directórios para produzir a saída.

Encontrar um ficheiro no Linux usando o nome do ficheiro

Para encontrar um ficheiro usando o nome do ficheiro, use a sintaxe find -name filename. Omitir o caminho procura o ficheiro em todo o disco. Por exemplo, você pode encontrar um ficheiro chamado example.err localizado no seu directório /home/username com o seguinte comando:

find -name example.err

Você deve ver uma saída semelhante:

 ./username/example.err

Localize um ficheiro no seu directório actual usando o comando Find

Dê uma vista de olhos na estrutura do directório de exemplo e nos ficheiros. Eles são referidos ao longo dos exemplos deste guia.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Se estiver em directory_1 e quiser encontrar o ficheiro example.err dentro do directório ou de qualquer uma das suas subdirectorias, pode emitir o seguinte comando:

find . -name example.err

A sua saída assemelha-se ao seguinte:

 ./example.err./directory_1/example.err

A saída reflecte directory_1 estrutura de directórios:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Localizar ficheiros de imagem no Linux usando a linha de comandos

Referenciando a estrutura de ficheiros na secção anterior, existe uma imagem chamada image01.png que está localizada na raiz (/)s da estrutura de directórios.

Para encontrar o ficheiro image01.png, corra o seguinte comando find que localiza todos os ficheiros .png guardados dentro do directório /.

find -name *.png

Você deve ver uma saída semelhante:

 ./image01.png

Mude o tipo de ficheiro da imagem e procure por qualquer ficheiro .jpg dentro do directório raiz (/):

find -name *.jpg

A saída assemelha-se ao exemplo. Consulte a estrutura do directório de exemplo na secção anterior para ver a localização do ficheiro.

 ./web_files/unnamed.jpg

Localizar um ficheiro vazio no seu directório usando a linha de comandos

Para encontrar um ficheiro vazio no seu directório usando a linha de comandos, emita o seguinte comando:

find . -type f -empty

Se não for retornado nenhum output, então não há um ficheiro vazio dentro do seu directório actual.

Opções e otimizações para encontrar arquivos no Linux usando a linha de comando

A configuração padrão para find ignora os links simbólicos. Se você quiser que find siga e retorne links simbólicos, adicione a opção -L ao comando, como mostrado abaixo:

find -O3 -L /var/www/ -name "*.html"

Este comando permite o nível máximo de otimização (-O3) e permite que find siga links simbólicos (-L). find procura em toda a árvore de directórios abaixo de /var/www/ por ficheiros que terminam com .html.

find optimiza a sua estratégia de filtragem para aumentar a performance. Três níveis de otimização selecionáveis pelo usuário são especificados como -O1, -O2, e -O3. O nível -O1 otimização é o padrão e força find a filtrar com base no nome do arquivo antes de executar todos os outros testes.

Optimização no nível -O2 prioriza os filtros de nome de arquivo, como em -O1, e então executa toda a filtragem de tipo de arquivo antes de proceder com outras condições mais intensivas em recursos. Level -O3 optimization permite find realizar a otimização mais severa e reordena todos os testes com base em suas despesas relativas e na probabilidade de sucesso.

Command Descrição
-O1 Filtro baseado no nome do arquivo primeiro (padrão).
-O2 Nome do ficheiro primeiro, depois tipo de ficheiro.
-O3 Permitir que find reordene automaticamente a pesquisa com base no uso eficiente de recursos e probabilidade. de sucesso
-maxdepth X Procurar diretório atual, bem como todos os subdiretórios X níveis profundo.
-iname Procurar sem considerar o caso de texto.
-not Retornar apenas os resultados que não correspondem ao caso de teste.
-type f Procurar por ficheiros.
-type d Procurar por directórios.

Procurar ficheiros no Linux através da linha de comandos

O comando find pode filtrar uma hierarquia de directórios com base em quando um ficheiro foi modificado pela última vez. Por exemplo, o seguinte comando encontra qualquer ficheiro com a extensão .err que foi modificado nos últimos 7 dias:

find / -name "*err" -mtime -7

O comando exemplo retorna a seguinte saída:

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Utilizar o Grep para encontrar ficheiros no Linux usando a linha de comandos

O comando find só é capaz de filtrar a hierarquia de directórios com base no nome e metadados de um ficheiro. Se você precisar pesquisar baseado no conteúdo do arquivo, use uma ferramenta likegrep. Considere o seguinte exemplo:

find . -type f -exec grep "test" '{}' \; -print

Este comando procura cada objecto na hierarquia de directórios actual (.) que é um ficheiro (-type f) e depois corre o comando grep "test" para cada ficheiro que satisfaça as condições. Os arquivos que correspondem são impressos na tela (-print). Os suportes encaracolados ({}) são um espaço reservado para os resultados da procura de correspondência. Os {} estão entre aspas simples (') para evitar a entrega de grep um nome de ficheiro malformado. O comando -exec é terminado com um ponto-e-vírgula (;), que deve ser escapado (\;) para evitar interpretação pela shell.

O arquivo usado no exemplo (example.err) tem um texto dentro dele que diz “teste”. Quando você executa o comando de exemplo, você vê uma saída similar:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep identificou cada arquivo dentro do diretório de trabalho atual que contém a string “test”.

Nota

Antes da implementação do comando find da opção -exec, você poderia gerar uma saída similar ao exemplo acima usando o comando xargs:

find . -type f -print | xargs grep "test"

Processar e encontrar arquivos usando o comando Find no Linux

A opção -exec executa comandos contra todos os objetos que combinam com a expressão find. Considere o seguinte exemplo:

find . -name "example.err" -exec chmod o+r '{}' \;

Isso filtra todos os objetos na hierarquia atual (.) para arquivos nomeados rc.conf e executa o comando chmod o+r para modificar as permissões dos arquivos do comando find.

O comando exemplo executa e executa a opção -exec no diretório raiz do processo find. Use -execdir para executar o comando especificado no directório onde a correspondência reside. Isto pode aliviar preocupações de segurança e produzir melhor desempenho para algumas operações.

As opções -exec ou -execdir rodam sem mais prompts. Se você preferir ser avisado antes da ação ser tomada, substitua -exec por -ok ou -execdir por -okdir.

Como encontrar e excluir arquivos usando a linha de comando Linux

Cuidado

Use esta opção com extremo cuidado.

Adicione a opção -delete ao final de uma expressão de partida para excluir todos os arquivos que coincidirem. Use esta opção quando tiver a certeza de que os resultados correspondem apenas aos ficheiros que deseja apagar.

No exemplo abaixo, find localiza recursivamente todos os ficheiros na hierarquia começando no directório actual e apaga todos os ficheiros que terminam com a extensão .err>

find . -name "*.err" -delete

Ainda tem algumas questões?

Junte-se à nossa Comunidade e coloque as suas questões para outros entusiastas do Linode e do Linux para o ajudar.

Perguntas Relacionadas:

Deixe uma resposta

O seu endereço de email não será publicado.