Digamos que hay archivos con nombres:
batman.c
debate.c
cricketbat.c
¿Qué comando y cómo debo usarlo para enumerar todos estos archivos usando la etiqueta de búsqueda bat
?
Digamos que hay archivos con nombres:
batman.c
debate.c
cricketbat.c
¿Qué comando y cómo debo usarlo para enumerar todos estos archivos usando la etiqueta de búsqueda bat
?
Respuestas:
bat
cualquier lugarPara encontrar todos los archivos en cualquier lugar dentro de /path/to/folder
cuyos nombres contengan bat
, puede usar:
find /path/to/folder -name '*bat*'
He citado el patrón de búsqueda *bat*
, ya que, si se omiten las comillas y los archivos coinciden *bat*
en el directorio actual, la cáscara se expandirá *bat*
en una lista de ellos y pasar que a find
. Entonces find
no funcionaría bien. ( \*bat\*
y "*bat*"
también trabajo)
Para buscar en la carpeta en la que se encuentra actualmente (por ejemplo, en la que ha cd
editado), use .
, como de costumbre:
find . -name '*bat*'
Para buscar en toda su computadora, use/
. Para buscar en su directorio de inicio, use ~
o el nombre completo de su directorio de inicio. ( El shell se expande~
a la ruta completa de su directorio de inicio).
Si desea buscar sin distinción entre mayúsculas y minúsculas, para que los archivos que contienen BAT
, bAt
etc., coincidan, use la -iname
prueba en lugar de la -name
prueba:
find /path/to/folder -iname '*bat*'
He notado que todos tus archivos terminan en .c
. Si solo desea encontrar archivos como ese, use:
find /path/to/folder -name '*bat*.c'
Noté que todos sus nombres de archivo tienen bat
ya sea al principio o al final de la parte que precede al .c
sufijo. Si desea evitar la coincidencia de archivos como embattled.c
, puede usar:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
es el operador o .
Para buscar solo archivos normales, y no carpetas, enlaces simbólicos y nodos de dispositivos especiales, puede usarlos -type f
. Esto se recomienda con frecuencia y, a veces, es bastante apropiado ... pero a menudo no es lo que realmente desea , especialmente si está ejecutando find
con el fin de examinar la salida usted mismo. Si tuviera un enlace simbólico que coincidiera con su búsqueda, ¿no le gustaría saberlo?
Si desea encontrar archivos regulares y enlaces simbólicos, puede usar:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Eso usa el -o
operador y también paréntesis para la agrupación (que debe citarse para que el shell no los trate especialmente; de lo contrario, obtendrá un error de sintaxis).
Pero suponga que solo desea ver enlaces simbólicos que finalmente apuntan a un archivo normal (y no enlaces simbólicos a directorios, nodos de dispositivos, etc.). En realidad, eso es aún más simple: usar en -xtype
lugar de -type
. Siempre que no se esté ejecutando find
con una -L
marca, -xtype
en un enlace simbólico se prueba el tipo de archivo al que apunta el enlace.
find /path/to/folder -name '*bat*' -xtype f
Si tiene un enlace simbólico a otro enlace simbólico a un archivo, -xtype f
lo emparejará aunque su objetivo directo sea otro enlace simbólico en lugar de un archivo normal. Esto es casi siempre lo que quieres.
A menudo las personas piensan que quieren -type f
, pero realmente quieren -xtype f
.
find
La acción predeterminada de si no especifica una es -print
. Todos los comandos dados anteriormente son equivalentes a sí mismos con -print
tachuelas al final.
find
a menudo se usa para ejecutar comandos basados en los archivos encontrados, a menudo, comandos que realizan cambios. Pero también hay otras acciones cuyo propósito es mostrar resultados, además -print
. De particular interés es -ls
:
find /path/to/folder -name '*bat*' -ls
Esto proporciona información detallada sobre cada archivo, en un formato de varias columnas, similar (aunque no exactamente igual) a lo que vería al ejecutar .ls file
Para obtener más información find
y otras formas de buscar archivos, consulte:
find
página del manual , accesible en línea o ejecutándose man find
en una terminal.find
, locate
y xargs
los servicios públicos.-xtype
consejo; quizás ls *bat*
y -maxdepth
/ mindepth
también valen la pena mencionar.
ls
ya cubría , me concentré en el caso recursivo find
aquí. Por supuesto, una respuesta detallada que abarque una lista no recursiva (o menos) de nombres de archivos que coincidan con algún patrón ( ls
y find
con -maxdepth
) también sería útil. Es posible que desee publicar una respuesta!
La forma más fácil es correr
locate bat
De esta manera, puede buscar en toda la computadora archivos que contengan "bat" en el nombre del archivo
Para actualizar la lista de archivos en su PC, ejecute
updatedb
Ejecute este comando cuando haya agregado recientemente nuevos archivos a su cuenta
updatetdb
updatedb
se ejecutó la última vez de forma manual o automática), sudo updatedb
primero debería ejecutarse, sí.
bat
.
find /
que locate
las búsquedas de una base de datos, mientras que find
las listas de forma recursiva /
y luego coincide con la expresión regular.
Abra el terminal y cambie los directorios al directorio desde el que desea comenzar a buscar y luego ejecute este comando:
find . -name "*bat*" -type f
El .
inicia el comando de búsqueda desde el directorio actual.
El -name
coincide con la cadena bat
y distingue entre mayúsculas y minúsculas. ( -iname
Es sensible a mayúsculas)
Las -type f
búsquedas de archivos únicos.
Si los archivos están en el directorio actual, use:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
O (para tenerlos línea por línea):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Si desea buscar esos archivos en el sistema, use:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Desea utilizar el find
comando, con la -iname
opción de coincidencia de nombre de archivo sin distinción entre mayúsculas y minúsculas, o la -name
opción de coincidencia de nombre de archivo con mayúsculas y minúsculas. Ambos le permitirán usar nombres comodín. Entonces, para encontrar cualquier nombre de archivo que contenga "bat" usaría:
find / -iname '*bat*'
O
find / -name '*bat*'
Los *
medios "cualquier carácter (s)", por lo que la búsqueda está buscando bat
con cualquier carácter, incluyendo ninguno, antes o después de ella. Las /
búsquedas desde el directorio raíz de forma recursiva, puede utilizar .
lo que buscará recursivamente desde el directorio actual, o la ruta absoluta desde donde desea buscar. Eche un vistazo a cómo buscar archivos usando expresiones regulares en el script de shell de Linux
-type f
, que hace más que simplemente excluir directorios y, a menudo, no es lo que los usuarios realmente quieren .
Usa lo bueno de siempre find
.
find <path_for_search> -type f -iname "*bat*"
p.ej.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
de man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.