
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 book1
pero 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:
- La extensión del archivo es desconocida.
- Se desconoce el nombre exacto (es decir, letras en mayúscula, números, etc.).
- 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 find
realmenteencontrarun archivo, el nombre del archivo debe coincidir con el patrón especificado. Para que una cadena no distinga entre mayúsculas y minúsculas, book1
debe Book1.gnumeric
agregarla *
para que se vea así:
find / -iname 'book1*'
o especifique el nombre completo:
find / -iname 'Book1.gnumeric'
En segundo lugar, -iname
ignorará find
el nombre del archivo en mayúsculas y minúsculas, por lo que si -iname book1
lo especifica también podría encontrarlo Book1
, bOok1
etc. Si está seguro de que se llama al archivo que está buscando, Book1.gnumeric
no use -iname
pero -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 $HOME
directorio 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/null
al final de la línea para ocultar todos *permission denied*
y otros errores que estarán presentes si invoca find
como 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 find
que salga después de encontrar el primer archivo coincidente:
find / -iname 'book1*' -print -quit 2>/dev/null
Respuesta2
Puedes probar el locate
comando. 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 book1
usted 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 something
y 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 -name
es 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 -iname
opció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 book1
se 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.