Cómo encontrar un archivo desde cualquier directorio

Cómo encontrar un archivo desde cualquier directorio

Estoy intentando buscar un archivo llamadoLibro 1.

En mi prueba estoy tratando de buscar el archivo mencionado anteriormente y en esta prueba no sé dónde se encuentra ese archivo.

Lo intenté find / -iname book1pero no hay salida.

¿Cómo encuentro mi archivo llamado libro1 usando la línea de comando si no sé dónde se encuentra el archivo?

EDITAR:

Mi escenario se describe con más detalle a continuación:

  1. La extensión del archivo es desconocida.
  2. Se desconoce el nombre exacto (es decir, letras en mayúscula, números, etc.).
  3. Se desconoce la ubicación del archivo.

Respuesta1

En primer lugar, un argumento para-iname es un shell.patrón. Puedes leer más sobre patrones enmanual de bash. La esencia es que para findrealmenteencontrarun archivo, el nombre del archivo debe coincidir con el patrón especificado. Para que una cadena no distinga entre mayúsculas y minúsculas, book1debe Book1.gnumericagregarla *para que se vea así:

find / -iname 'book1*'

o especifique el nombre completo:

find / -iname 'Book1.gnumeric'

En segundo lugar, -inameignorará findel nombre del archivo en mayúsculas y minúsculas, por lo que si -iname book1lo especifica también podría encontrarlo Book1, bOok1etc. Si está seguro de que se llama al archivo que está buscando, Book1.gnumeric no use -inamepero -name, será más rápido:

find / -name 'Book1.gnumeric'

En tercer lugar, recuerde citar el patrón como se dice en elotra respuesta.

Y por último: ¿está seguro de que desea buscar el archivo? en todos ladosen su sistema? Es posible que el archivo que estás buscando esté realmente en tu $HOMEdirectorio si trabajaste en él o lo descargaste de algún lugar. Nuevamente, eso puede ser mucho más rápido.

EDITAR:

Noté que editaste tu pregunta. Si no conoce el nombre completo del archivo, las mayúsculas y la ubicación, debería usar algo como esto:

find / -iname 'book1*'

También sugiero ponerlo 2>/dev/nullal final de la línea para ocultar todos *permission denied*y otros errores que estarán presentes si invoca findcomo usuario no root:

find / -iname 'book1*' 2>/dev/null

Y si está seguro de que está buscando un solo archivo y solo hay un archivo en su sistema que coincide con los criterios, puede indicarle findque salga después de encontrar el primer archivo coincidente:

find / -iname 'book1*' -print -quit 2>/dev/null

Respuesta2

Puedes probar el locatecomando. Utiliza una base de datos de nombres de archivos para agilizar la búsqueda.

Para buscar todos los archivos que coincidan *book1*e ignorar mayúsculas y minúsculas, puede usar

locate -i book1

si quieres buscar archivosa partir decon book1usted tendrá que hacer el comodín usted mismo:

locate -i 'book1*'

Es mucho más rápido que find, pero está tan actualizado como la última vez que se actualizó la base de datos.

Respuesta3

Si sabe que tiene un archivo llamado book1.something, donde se desconocen la ubicación del archivo, el valor exacto de somethingy el patrón de uso de mayúsculas del nombre del archivo:

find / -iname 'book1.*'

Si lo único que sabe con seguridad es que el nombre del archivo contiene la palabra book, puede generar una lista probablemente mucho más grande con

find / -iname '*book*'

El argumento -namees un patrón global de shell. Desde el directorio en el que se encuentra el archivo, compare:

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric

Esto representa el tipo de búsqueda realizada por -name. La -inameopción simplemente permite una versión de esto que no distingue entre mayúsculas y minúsculas.

Respuesta4

Con Zsh puedes usar patrones globales, por lo que esto también funciona:

ls -a /**/book1

Esto encontrará todas las ubicaciones donde book1se encuentra un archivo llamado.

En mis pruebas, esto parece ser más rápido que usarfind y también produce poco o ningúnerrores de permiso de usuariocuando se ejecuta sin permiso de root

Vermanual.

información relacionada