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 book1
pero 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
Book1
y está en un directorio que puede leer,find / -iname book1
lo encontrará. ¿Estás seguro de que es asíBook1
y noBook1.xyz
?find
ylocate
.locate
es 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 defind
poder verlo. Observe también quefind
, como muchos comandos * nix, es frustrantemente silencioso cuando no tiene éxito.Respuestas:
Primero, un argumento para
-iname
es un patrón de shell . Puede leer más sobre patrones en el manual de Bash . La esencia es que para encontrarfind
realmente 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í:book1
Book1.gnumeric
*
o especifique el nombre completo:
En segundo lugar,
-iname
se hacenfind
pasar por alto el caso de nombre de archivo por lo que si se especifica-iname book1
también podría encontrarBook1
,bOok1
etc. Si estás seguro de que el archivo que está buscando se llamaBook1.gnumeric
entonces 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
$HOME
directorio 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/null
al final de la línea para ocultar todos*permission denied*
y otros errores que estarán presentes si invocafind
como 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
find
que salga después de encontrar el primer archivo coincidente:fuente
-iname
no es portátilPuedes probar el
locate
comando. 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
book1
que 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 exactosomething
y 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
-name
es 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-iname
opció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
,k
y 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 (
iregex
es 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/home
má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
find
comando no tiene acceso (ejecutar) correctamente,find
no podrá encontrarlo allí.fuente
find
Silver 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 PATTERN
Imprimir nombres de archivo que coincidan con PATTERNfuente
locate
y sus variantes tienden a ser un método rápido.Si localizar no está disponible, puede usar
find
en 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
-xdev
find
búsquedas en otras particiones, como/proc
y/sys
, que tienden a inundar su pantalla con errores, especialmente si no es root. (Los errores se pueden ocultar agregando2> /dev/null
al 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, ladf
salida 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
df
parámetros pueden necesitar ajuste. -P hace que GNUdf
proporcione la salida POSIX estándar. Otras versiones pueden tener otros parámetros o necesitarlos. Lea su página de manual)El
grep -F
excluye otras cosas devueltas, como particiones de intercambio.En la versión que no es GNU, awk busca dispositivos con un montaje que comience
/dev
para obtener sistemas de archivos reales y luego imprima el último campo (el punto de montaje) desde ladf
salida.Esto también supone un shell tipo bourne (
ksh
ybash
debería funcionar. Si está utilizando unacsh
variante, inicie un shell con script antes de intentarlo)fuente
grep
s 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