Estoy tratando de buscar un archivo llamado Libro1 .
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 book1 usando la línea de comando si no sé dónde está ubicado 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 mayúsculas, números, etc.)
- La ubicación del archivo es desconocida
command-line
files
find
Aspire27
fuente
fuente

Book1y está en un directorio que puede leer,find / -iname book1lo encontrará. ¿Estás seguro de que es asíBook1y noBook1.xyz?findylocate.locatees generoso y encontrará todo lo que coincida, siempre que esté en su base de datos, que normalmente se actualiza a diario.find, en este caso, está buscando un archivo glob, el tipo de patrón que usaríals. Probablemente te refieresiname '*book1*'. Tenga en cuenta que el patrón debe estar entre comillas para evitar que el shell lo expanda antes defindpoder verlo. Observe también quefind, como muchos comandos * nix, es frustrantemente silencioso cuando no tiene éxito.Respuestas:
Primero, un argumento para
-inamees un patrón de shell . Puede leer más sobre patrones en el manual de Bash . La esencia es que para encontrarfindrealmente un archivo, el nombre del archivo debe coincidir con el patrón especificado. Para hacer una coincidencia de cadena que no distinga entre mayúsculas y minúsculas, debe agregar para que se vea así:book1Book1.gnumeric*o especifique el nombre completo:
En segundo lugar,
-inamese hacenfindpasar por alto el caso de nombre de archivo por lo que si se especifica-iname book1también podría encontrarBook1,bOok1etc. Si estás seguro de que el archivo que está buscando se llamaBook1.gnumericentonces no utilizar-iname, pero-name, que será más rápido:Tercero, recuerde citar el patrón como se dijo en la otra respuesta .
Y por último, ¿está seguro de que desea buscar el archivo en todas partes en su sistema? Es posible que el archivo que está buscando esté realmente en su
$HOMEdirectorio si trabajó en eso o lo descargó de alguna parte. De nuevo, eso puede ser mucho más rápido.EDITAR :
Me di cuenta de 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:
También sugiero poner
2>/dev/nullal final de la línea para ocultar todos*permission denied*y otros errores que estarán presentes si invocafindcomo usuario no root:Y si está seguro de que está buscando un solo archivo, y solo hay un único archivo en su sistema que coincide con los criterios que puede indicar
findque salga después de encontrar el primer archivo coincidente:fuente
-inameno es portátilPuedes probar el
locatecomando. Utiliza una base de datos de nombres de archivos para agilizar la búsqueda.Para buscar todas las coincidencias de archivos
*book1*e ignorar mayúsculas y minúsculas, puede usarsi quieres buscar archivos que comienzan con la
book1que tendrá que hacer lo mismo comodín:Es mucho más rápido que
find, pero solo está tan actualizado como la última vez que se actualizó la base de datos.fuente
Si sabe que tiene un archivo llamado
book1.something, donde se desconoce la ubicación del archivo, el valor exactosomethingy el patrón de mayúsculas del nombre de archivo:Si todo lo que sabe con certeza es que el nombre del archivo contiene la palabra
book, puede generar una lista probablemente mucho más grande conEl argumento
-namees un patrón glob de concha. Desde el directorio en el que se encuentra el archivo, compare:Esto representa el tipo de búsqueda realizada por
-name. La-inameopción simplemente permite una versión sin distinción entre mayúsculas y minúsculas.fuente
POSIXY
Reportará el camino de todos los archivos cuyo nombre contenga
book1(con cualquier variación del caso, pero sólo teniendo en cuenta los caracteres latinos ASCIIbokBOK, no las muchas otras variaciones en Unicode, como𝗄,𝚔,𝘬,ᵏ,ₖ,K,ky todas sus variaciones con diacríticos ...) en todos los directorios a los que tiene acceso de lectura.fuente
Para este tipo de tareas siempre hago:
find / -iregex '.*Book1.*'Esta forma se ocuparía de los 3 puntos de su escenario (
iregexes una expresión racional que no distingue entre mayúsculas y minúsculas, y el patrón con.*ambos lados coincidiría con cualquier carácter antes y después de su patrón fijo de Libro1; esto obviamente podría devolverle más resultados de los necesarios pero está seguro de no perder el archivo)La principal diferencia: si es posible, ser más restrictiva que simplemente usar
/, como tratar solamente/homemás o menos, de lo contrario se desciende en algunos directorios que no son relevantes (/sys,/dev, etc ...)Sin embargo, recuerde que se aplican los permisos de Unix: si el archivo está en un directorio para el que el usuario que ejecuta el
findcomando no tiene acceso (ejecutar) correctamente,findno podrá encontrarlo allí.fuente
findSilver Searcher es una utilidad muy rápida y práctica para buscar archivos y contenido.
Para resolver su problema, el comando del buscador plateado se vería así ...
ag -g Book1-g PATTERNImprimir nombres de archivo que coincidan con PATTERNfuente
locatey sus variantes tienden a ser un método rápido.Si localizar no está disponible, puede usar
finden su lugar. Tiende a ser mucho más lento, pero también mucho más preciso.Si tiene una única partición: (ejecute como root si su usuario puede no tener acceso al archivo)
Si no incluye
-xdevfindbúsquedas en otras particiones, como/procy/sys, que tienden a inundar su pantalla con errores, especialmente si no es root. (Los errores se pueden ocultar agregando2> /dev/nullal final del comando de búsqueda (el comentario debe eliminarse))Si tiene varias particiones y no sabe en cuál está el archivo, puede obtener una lista con
lsblk(en sistemas operativos basados en Linux, ladfsalida de análisis es una opción de lo contrario) y alimentar eso en find: (rootear nuevamente si no sé si puedes acceder al archivo)(Esto es un poco frágil si alguno de sus puntos de montaje tiene espacios) (los
dfparámetros pueden necesitar ajuste. -P hace que GNUdfproporcione la salida POSIX estándar. Otras versiones pueden tener otros parámetros o necesitarlos. Lea su página de manual)El
grep -Fexcluye otras cosas devueltas, como particiones de intercambio.En la versión que no es GNU, awk busca dispositivos con un montaje que comience
/devpara obtener sistemas de archivos reales y luego imprima el último campo (el punto de montaje) desde ladfsalida.Esto también supone un shell tipo bourne (
kshybashdebería funcionar. Si está utilizando unacshvariante, inicie un shell con script antes de intentarlo)fuente
greps puede ser un poco ruidoso, aprenda cómo filtrarlo mejor (esto no debería ser necesario con el ejemplo, pero si se busca algo más común, los greps necesitarían ajustes para mantener bajos los niveles de ruido)ag (el buscador plateado) proporciona una búsqueda muy rápida en archivos, y también tiene una opción para buscar el nombre de archivo:
Entonces, en mi caso de uso aquí, es> 30 veces más rápido si el archivo no es un archivo ignorado por ag.
fuente