¿Cómo encontrar la ruta de un archivo en función de su nombre?

22

Estoy tratando de encontrar el settings.xmlarchivo en mi máquina Ubuntu. No tengo idea de dónde está y en qué directorio está.

Intenté usar esto

ls -R | grep settings.xml

Pero no me muestra la ruta completa donde está ... ¿Hay algún otro comando que deba probar que pueda darme la ruta completa?

SSH
fuente
44
Siempre que piense que la solución es analizar la salida de ls, es casi seguro que lo está haciendo de la manera incorrecta .
terdon

Respuestas:

23

Para búsqueda rápida (pero no definitiva):

locate -br '^settings.xml$'

De man locate:

   locate  reads  one or more databases prepared by updatedb(8) and writes
   file names matching at least one of the PATTERNs  to  standard  output,
   one per line.

   -b, --basename
          Match  only  the base name against the specified patterns.  This
          is the opposite of --wholename.
   -r, --regexp REGEXP
          Search for a basic regexp REGEXP.  No PATTERNs  are  allowed  if
          this  option  is used, but this option can be specified multiple
          times.

El ^y $asegúrese de que solo se imprimirán los archivos cuyo nombre sea settings.xmly no los archivos cuyos nombres contengan settings.xml .

Es posible que necesite ejecutar por primera vez: updatedb(as root) para actualizar / construir la base de datos de locate.

user.dz
fuente
@terdon, me sorprendiste, ¡nunca antes había pensado en mirarlo man locate! suponiendo que sea una simple herramienta de búsqueda. Muchas gracias.
user.dz
Sí, esa fue mi reacción más o menos la primera vez que leí la página del manual :)
terdon
44
Vale la pena señalar el papel de updatedbeste comando - a locatemenudo falla sin eso, para mí, de todos modos
rm-vanda
@ rm-vanda, he actualizado la respuesta para mencionar updatedb. Gracias.
user.dz
44
locate '*/settings.xml'es probablemente más portátil entre las diferentes implementaciones de locate(donde esté disponible).
Stéphane Chazelas
15

Una búsqueda lenta pero constante a través del sistema de archivos, pero definitiva.

find / -xdev -name settings.xml

Tomará algún tiempo y es posible que obtenga algunos errores de permiso, pero llegará allí. Si tiene alguna idea más sobre dónde se puede ubicar, cambie el primer directorio de /a/where/you/guess

X Tian
fuente
44
Agregar 2>/dev/nullal final del comando suprimirá toda la salida de error (al redirigir stderr al dispositivo nulo).
Tanner Swett
2
-xdev: No descienda directorios en otros sistemas de archivos.
Pablo A
1

Ejemplo:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml
pulpo
fuente
0

El árbol es otra buena manera, si no está seguro exactamente de lo que está buscando, y parece ser un poco más rápido:

tree -f / | grep settings.xml

Otras banderas útiles: -ien grep ignorará el caso, -hpara humanos legibles en árbol -

- ¡La página del manual tiene muchas opciones útiles!

rm-vanda
fuente
66
No es una buena idea, tree(1)muestra un árbol ASCII-art de los archivos, que luego es mutilado grep(1).
vonbrand
1
Sí, si vas a usar tree, también puedes usar el find . type -fque será más rápido.
terdon
0

Los parámetros -la imprimen la versión larga de ls y los directorios también. ls -la | grep settings.xml

Eugenio F. Martinez Pacheco
fuente
2
Esto aún no le daría la ruta completa al archivo dado.
Kusalananda