Cómo encontrar un archivo en FreeBSD


14

Estoy tratando de localizar todas las copias de example.filenameen mi servidor FreeBSD. ¿Cuál es la forma mejor / más fácil / más eficiente de hacer esto?


1
Si bien las respuestas serán similares, es posible que desee aclarar si está utilizando Linux o FreeBSD. No son lo mismo.
Greg Hewgill el

título editado para que el sistema operativo sea más específico
Ian

Esto probablemente debería etiquetarse con FreeBSD, pero me falta la reputación para hacerlo.
mikl 05 de

Respuestas:


18
find / -name example.filename

2
Fiable, pero lento. A veces muy lento.
dmckee --- ex-gatito moderador

3
otros indicadores de "búsqueda" que pueden ser apropiados, según la necesidad: -tipo f (no se molestará con directorios o enlaces simbólicos con el mismo nombre) -ls (para mostrar detalles como el tamaño del archivo, por ejemplo, si los archivos tienen el mismo nombre pero diferentes contenidos)
Zac Thompson

19
locate filename

Mucho más rápido que find, si está ejecutando el servicio de localización, y solo encuentra archivos que existían en el momento en que se updatedbejecutó por última vez (generalmente la noche antes del control de un trabajo cron).

Usted puede ejecutar updatedbcon la mano, pero que es aún más lento que el findCletus sugiere , y requiere de la raíz. A veces actualizo la base de datos a mano después de instalar un montón de cosas nuevas.


3
Localizar solo funciona si tiene el servicio en ejecución para construir el db de localización (olvide cómo se llama). También puede sufrir un retraso de tiempo (ya que el archivo que está buscando puede haberse agregado desde la última compilación).
cletus

Ediciones y comentarios cruzados en el cable. Frio. Usted tiene, por supuesto, razón en ambos aspectos.
dmckee --- ex-gatito moderador

44
Si te encuentras haciendo find /o en un árbol grande más de una vez a la semana, locateprobablemente valga la pena ejecutar el servicio, porque locate(1)es mucho más rápido.
Drew Stephens

@cletus Running sudo periodic weeklyactualiza la locatebase de datos. Ejecútelo después de cualquier instalación o descarga que pueda contener los archivos que desee.
Basil Bourque

2

Si tienes instalado localizar (también conocido como slocate), entonces

locate example.filename

localizar ejecuta un trabajo cron todas las noches que reindexa todos los archivos en su máquina. No siempre está actualizado por ese motivo.


2

A veces desea buscar archivos en un nivel de directorio específico. En este caso, puede ser conveniente utilizar comodines de shell:

ls /data/*/example.filename

Obviamente, esto solo funciona si tiene una estructura de directorio rígida.


1

locate

Como otros mencionaron, locatees la forma más rápida de encontrar un archivo. Este comando utiliza un índice precompilado de los nombres de archivo y carpeta. Se busca en esta base de datos de nombres, en lugar de rastrear su sistema de archivos.

locate example.filename 

Para ser insensible a mayúsculas y minúsculas, agregue -i.

locate -i eXAmPle.FileName

Actualizar locatebase de datos

La base de datos utilizada por locatedebe estar actualizada. Después de realizar una instalación o descarga que puede contener el archivo deseado, debe actualizar la locatebase de datos.

La locatebase de datos eventualmente será actualizada automáticamente por su sistema FreeBSD. Hay un conjunto semanal de tareas que incluye esta tarea. Estas tareas se enumeran en el /etc/periodic/weekly/310.locateguión.

La forma más fácil y segura de forzar la actualización temprana de la locatebase de datos es forzar el conjunto semanal de tareas para que se haga ahora.

sudo periodic weekly

O incluso podría obligar a realizar todas las tareas habituales. Es posible que desee hacer esto inmediatamente después de configurar un nuevo sistema FreeBSD.

sudo periodic daily weekly monthly

Si utiliza otras vías para actualizar la locatebase de datos, es posible que reciba un mensaje sobre la inseguridad, revelando los nombres de todos los archivos de su sistema a cualquier usuario en el sistema FreeBSD. Usar la periodicruta evita este problema.


0

Si tiene la base de datos de localización actualizada, simplemente:

locate example.filename

0

A veces hago


  find . | grep example.filename

probablemente enormemente ineficiente sin embargo.


Sí, eso coincide con todo y luego tira todo excepto el nombre que estabas buscando. En su lugar, simplemente puede hacer 'find -name "example.filename"' que hace exactamente lo mismo sin imprimir primero todo y sin ejecutar un proceso grep adicional.
Mihai Limbăşan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.