Como encontrar um arquivo no FreeBSD


14

Estou tentando localizar todas as cópias example.filenameno meu servidor FreeBSD. Qual é a melhor / mais fácil / mais eficiente maneira de fazer isso?


1
Embora as respostas sejam semelhantes, você pode esclarecer se está usando Linux ou FreeBSD. Eles não são a mesma coisa.
Greg Hewgill

título editado para tornar o sistema operacional mais específico
Ian

Provavelmente, isso deve ser marcado como FreeBSD, mas não tenho a reputação de fazê-lo.
Mikl 5/05/09

Respostas:


18
find / -name example.filename

2
Confiável, mas lento. Às vezes muito lento.
dmckee --- ex-moderador gatinho

3
outros sinalizadores 'find' que podem ser apropriados, dependendo da necessidade: -type f (não se incomoda com diretórios ou links simbólicos com o mesmo nome) -ls (para mostrar detalhes como o tamanho do arquivo, por exemplo, se os arquivos tiverem o mesmo nome, mas diferentes conteúdos)
Zac Thompson

19
locate filename

Muito mais rápido que find, se você estiver executando o serviço de localização, e ele encontrar apenas os arquivos que existiam na updatedbúltima vez em que foram executados (geralmente a noite antes, sob o controle de um trabalho cron).

Você pode correr updatedbmanualmente, mas isso é ainda mais lento do que o findcletus sugere e requer raiz. Às vezes, atualizo o banco de dados manualmente depois de instalar um monte de coisas novas.


3
Localizar só funciona se você tiver o serviço em execução para criar o banco de dados de localização (esqueça como é chamado). Também pode sofrer atrasos (já que o arquivo que você está procurando pode ter sido adicionado desde a última compilação).
Cletus

Edições e comentários cruzados no fio. Legal. Você está, é claro, certo em ambos os aspectos.
dmckee --- ex-moderador gatinho

4
Se você se encontra fazendo find /ou em qualquer árvore grande mais de uma vez por semana, a execução do locateserviço provavelmente vale a pena, porque locate(1)é muito mais rápida.
Drew Stephens

@cletus Running sudo periodic weeklyatualiza o locatebanco de dados. Execute isso após qualquer instalação ou download que possa conter os arquivos que você deseja.
Basil Bourque

2

Se você tiver o localizador (aka slocate) instalado,

locate example.filename

o local executa um trabalho cron todas as noites que reindexa todos os arquivos em sua máquina. Nem sempre é atualizado por esse motivo.


2

Às vezes, você deseja encontrar arquivos em um nível de diretório específico. Nesse caso, pode ser conveniente usar caracteres curinga do shell:

ls /data/*/example.filename

Obviamente, isso só funciona se você tiver uma estrutura de diretórios rígida.


1

locate

Como outros mencionaram, locateé a maneira mais rápida de encontrar um arquivo. Este comando usa um índice pré-compilado dos nomes de arquivos e pastas. Esse banco de dados de nomes é pesquisado, em vez de rastrear seu sistema de arquivos.

locate example.filename 

Para não diferenciar maiúsculas de minúsculas, adicione -i.

locate -i eXAmPle.FileName

Atualizar locatebanco de dados

O banco de dados usado por locatedeve estar atualizado. Após fazer uma instalação ou download que possa conter o arquivo desejado, você deve atualizar o locatebanco de dados.

O locatebanco de dados será atualizado automaticamente pelo seu sistema FreeBSD. Há um conjunto semanal de tarefas que inclui essa tarefa. Essas tarefas estão listadas no /etc/periodic/weekly/310.locatescript.

A maneira mais fácil e segura de forçar a atualização antecipada do locatebanco de dados é forçar o conjunto semanal de tarefas a serem executadas agora.

sudo periodic weekly

Ou você pode até forçar todas as tarefas regulares a serem feitas. Você pode fazer isso imediatamente após configurar um novo sistema FreeBSD.

sudo periodic daily weekly monthly

Se você estiver usando outros meios para atualizar o locatebanco de dados, poderá receber uma mensagem sobre a segurança, revelando os nomes de todos os arquivos do seu sistema para qualquer usuário no sistema FreeBSD. O uso da periodicrota evita esse problema.


0

Se você possui o banco de dados de localização atualizado, basta:

locate example.filename

0

Eu faço às vezes


  find . | grep example.filename

provavelmente extremamente ineficiente no entanto.


Sim, isso corresponde a tudo e depois joga tudo fora, exceto o nome que você estava procurando. Em vez disso, você pode simplesmente fazer 'find -name "example.filename"', que faz exatamente o mesmo material sem primeiro imprimir tudo e sem executar um processo adicional de grep.
Mihai Limbăşan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.