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
- Comandos e Sintaxe Comum de Encontrar Linux
- Encontrar um ficheiro no Linux usando o nome do ficheiro
- Localize um ficheiro no seu directório actual usando o comando Find
- Localizar ficheiros de imagem no Linux usando a linha de comandos
- Localizar um ficheiro vazio no seu directório usando a linha de comandos
- Opções e otimizações para encontrar arquivos no Linux usando a linha de comando
- Procurar ficheiros no Linux através da linha de comandos
- Utilizar o Grep para encontrar ficheiros no Linux usando a linha de comandos
- Processar e encontrar arquivos usando o comando Find no Linux
- Como encontrar e excluir arquivos usando a linha de comando Linux
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 processofind
. - O atributo
starting/path
define o directório de nível superior ondefind
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 comandoxargs
: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: