Sé que esto está etiquetado como Linux, pero vale la pena mencionarlo: la ruta es necesaria para otras variantes * nix que no son Linux. En Linux, la ruta es opcional si desea utilizar punto.
IslandCow
44
@Seatter "foo *" le dice a find que busque todos los archivos que comienzan con "foo". Es solo su ejemplo. Puede usar "gpio *" para encontrar todos los archivos cuyos nombres comienzan con gpio, o simplemente "gpio1" para encontrar todos los archivos llamados gpio1.
schumacher574
29
tenga en cuenta que el "foo *" está entre comillas para que el shell no lo expanda antes de pasarlo a buscar. si lo hiciera find . foo*, foo*se expandiría Y LUEGO pasaría a buscar.
grinch
33
Vale la pena destacar que " "es muy necesario para la búsqueda recursiva.
WesternGun
3
También es útil: si no desea recibir notificaciones sobre directorios para los que no tiene permiso (u otros errores), puede hacerlofind . -name "foo*" 2>/dev/null
Jobbo
222
La búsqueda de tuberías en grep suele ser más conveniente; le da todo el poder de las expresiones regulares para la coincidencia arbitraria de comodines.
Por ejemplo, para buscar todos los archivos con una cadena "foo" que no distingue mayúsculas de minúsculas en el nombre del archivo:
findTambién tiene las -iname, -regexy -iregexbanderas para mayúsculas y minúsculas comodín, expresiones regulares, y sensible a las mayúsculas coincidencia de expresión regular, por lo que las tuberías a grepes innecesario.
iobender
77
No creo que se trate de ser innecesario, sino de ser más conveniente.
Elijah Lynn
1
Sin embargo, canalizar a grep -v puede permitirle usar cadenas simples o expresiones regulares para eliminar las entradas que no desea.
door_number_three
3
@iobender - Lamentablemente, puedo decirle por experiencia que no todos los sistemas vienen con un findcomando que admite esas opciones. A veces se grepconvierte en la única opción.
Sr. Llama
150
find encontrará todos los archivos que coinciden con un patrón:
En algunos casos, he necesitado el parámetro -L para manejar enlaces de directorios simbólicos. Por defecto, los enlaces simbólicos se ignoran. En esos casos, era bastante confuso ya que cambiaría el directorio a un subdirectorio y vería el archivo que coincidía con el patrón, pero find no devolvería el nombre del archivo. El uso de -L resuelve ese problema. Las opciones de enlace simbólico para buscar son -P -L -H
El interruptor L es muy útil. Muchas veces los usuarios no tienen idea de los directorios subyacentes, ya sea que estén vinculados por software o sean directorios normales. Entonces, en caso de duda, siempre es bueno usar la opción L. Al menos, siempre me ha ayudado.
Ritesh
2
Esa fue la respuesta para mí. ¡Gracias!
iedmrc
34
Si su shell admite una nueva opción global (puede habilitarse mediante :)shopt -s globstar , puede usar:
echo **/*foo*
para buscar archivos o carpetas de forma recursiva. Esto es compatible con Bash 4, zsh y shells similares.
Personalmente tengo esta función de shell definida:
f(){ find .-name "*$1*";}
Nota: La línea anterior se puede pegar directamente en el shell o agregarse al ~/.bashrcarchivo de su usuario .
Entonces puedo buscar cualquier archivo escribiendo:
f some_name
Alternativamente, puede usar una fdutilidad con una sintaxis simple, por ejemplo fd pattern.
Su respuesta es la primera más correcta aquí, ya que solo busca archivos como se especifica. Los otros que no especifiquen el tipo devolverán los directorios.
wilsotc
si desea buscar un directorio "-type f" podría cambiarse a "-type d"
La forma predeterminada de buscar archivos recursivos, y disponible en la mayoría de los casos es
find .-name "filepattern"
Comienza el desplazamiento recursivo para el nombre de archivo o patrón desde el directorio actual en el que está ubicado. Con el comando find, puede usar comodines y varios modificadores, para ver la lista completa de opciones, escriba
man find
o si las páginas man no están disponibles en su sistema
find --help
Sin embargo, hay herramientas más modernas y más rápidas que las que se encuentran, que atraviesan todo su sistema de archivos e indexan sus archivos, una de esas herramientas comunes es localizar o descifrar / ubicar, debe consultar el manual de su sistema operativo sobre cómo instalarlo, y una vez que esté instalado necesita iniciar la base de datos, si el script de instalación no lo hace por usted, puede hacerlo manualmente escribiendo
sudo updatedb
Y, usarlo para buscar algún tipo de archivo en particular
locate filename
O, para buscar el nombre de archivo o el patrón desde el directorio actual, puede escribir:
pwd | xargs -n 1-I {} locate "filepattern"
Examinará su base de datos de archivos e imprimirá rápidamente los nombres de ruta que coinciden con el patrón que ha escrito. Para ver la lista completa de las opciones de localizar, escriba:
locate --help oman locate
Además, puede configurar localizar para actualizar su base de datos en horas programadas a través del trabajo cron, por lo que muestra cron qué actualizaciones db a la 1 AM se vería así:
01*** updatedb
Estos trabajos cron deben ser configurados por root, ya que updatedb necesita privilegios de root para atravesar todo el sistema de archivos.
para búsqueda de archivos
find / -xdev -name settings.xml -> computadora completa
find ./ -xdev -name settings.xml -> directorio actual y su subdirectorio
Me sorprende ver que localizar no se usa mucho cuando vamos de forma recursiva.
Primero haría una búsqueda de "$ PWD" para obtener la lista de archivos en la carpeta de interés actual, y luego ejecutaría greps en ellos como quisiera.
locate "$PWD"| grep -P <pattern>
Por supuesto, esto supone que la actualizaciónb se realiza y el índice se actualiza periódicamente. Esta es una forma mucho más rápida de encontrar archivos que ejecutar un hallazgo y pedirle que baje del árbol. Mencionando esto para completar. Nada en contra de usar find, si el árbol no es muy pesado.
locate "$PWD*.mp4" Sólo para recordar que usted puede ser capaz de saltar elgrep
Jefferey cueva
5
El siguiente comando ayuda a buscar cualquier archivo
1) Independientemente del caso
2) Resultado Excluir carpetas sin permiso
3) Buscar desde la raíz o desde la ruta que desee. Cambiar / con la ruta que prefieras.
¿Por qué demonios usas grep para eso? Solo redirige stderr a nulofind / -iname '*C*.xml' 2>/dev/null
phuclv
3
Si desea buscar un archivo especial con comodín, puede usar el siguiente código:
find .-type f -name "*.conf"
Supongamos que desea buscar todos los archivos .conf desde aquí:
.significa búsqueda iniciada desde aquí (lugar actual) -typesignifica tipo de elemento de búsqueda que aquí es el archivo (f). -namesignifica que desea buscar archivos con nombres * .conf .
find . foo*
,foo*
se expandiría Y LUEGO pasaría a buscar." "
es muy necesario para la búsqueda recursiva.find . -name "foo*" 2>/dev/null
La búsqueda de tuberías en grep suele ser más conveniente; le da todo el poder de las expresiones regulares para la coincidencia arbitraria de comodines.
Por ejemplo, para buscar todos los archivos con una cadena "foo" que no distingue mayúsculas de minúsculas en el nombre del archivo:
fuente
find
También tiene las-iname
,-regex
y-iregex
banderas para mayúsculas y minúsculas comodín, expresiones regulares, y sensible a las mayúsculas coincidencia de expresión regular, por lo que las tuberías agrep
es innecesario.find
comando que admite esas opciones. A veces segrep
convierte en la única opción.find
encontrará todos los archivos que coinciden con un patrón:Sin embargo, si quieres una foto:
¡Espero que esto ayude!
fuente
brew install tree
para usuarios de Mac OSX sinapt-get
instalarEn algunos casos, he necesitado el parámetro -L para manejar enlaces de directorios simbólicos. Por defecto, los enlaces simbólicos se ignoran. En esos casos, era bastante confuso ya que cambiaría el directorio a un subdirectorio y vería el archivo que coincidía con el patrón, pero find no devolvería el nombre del archivo. El uso de -L resuelve ese problema. Las opciones de enlace simbólico para buscar son -P -L -H
fuente
Si su shell admite una nueva opción global (puede habilitarse mediante :)
shopt -s globstar
, puede usar:para buscar archivos o carpetas de forma recursiva. Esto es compatible con Bash 4, zsh y shells similares.
Personalmente tengo esta función de shell definida:
Nota: La línea anterior se puede pegar directamente en el shell o agregarse al
~/.bashrc
archivo de su usuario .Entonces puedo buscar cualquier archivo escribiendo:
Alternativamente, puede usar una
fd
utilidad con una sintaxis simple, por ejemplofd pattern
.fuente
shopt -s globstar
comando. Esto es compatible con Bash, zsh y shells similares.bash-3.2$ shopt -s globstar
dabash: shopt: globstar: invalid shell option name
fd
En caso de que
find
sea demasiado lento, pruebe con lafd
utilidad, una alternativa simple y rápida a lafind
escrita en Rust.Sintaxis:
Manifestación:
Página de inicio: https://github.com/sharkdp/fd
fuente
asciinema
, luego se convirtió al formato GIF, pero no estoy seguro.asciicast2vector
se pueda usar.En el comodín puede proporcionar la cadena que desea que coincida, por ejemplo, * .c (para todos los archivos c)
fuente
Puedes usar:
Si quieres usar REGX usa
-iname
fuente
El siguiente comando enumerará todos los archivos que tengan el nombre exacto "patrón" (por ejemplo) en la actual y sus subcarpetas.
find ./ -name "pattern"
fuente
La forma predeterminada de buscar archivos recursivos, y disponible en la mayoría de los casos es
Comienza el desplazamiento recursivo para el nombre de archivo o patrón desde el directorio actual en el que está ubicado. Con el comando find, puede usar comodines y varios modificadores, para ver la lista completa de opciones, escriba
o si las páginas man no están disponibles en su sistema
Sin embargo, hay herramientas más modernas y más rápidas que las que se encuentran, que atraviesan todo su sistema de archivos e indexan sus archivos, una de esas herramientas comunes es localizar o descifrar / ubicar, debe consultar el manual de su sistema operativo sobre cómo instalarlo, y una vez que esté instalado necesita iniciar la base de datos, si el script de instalación no lo hace por usted, puede hacerlo manualmente escribiendo
Y, usarlo para buscar algún tipo de archivo en particular
O, para buscar el nombre de archivo o el patrón desde el directorio actual, puede escribir:
Examinará su base de datos de archivos e imprimirá rápidamente los nombres de ruta que coinciden con el patrón que ha escrito. Para ver la lista completa de las opciones de localizar, escriba:
locate --help
oman locate
Además, puede configurar localizar para actualizar su base de datos en horas programadas a través del trabajo cron, por lo que muestra cron qué actualizaciones db a la 1 AM se vería así:
Estos trabajos cron deben ser configurados por root, ya que updatedb necesita privilegios de root para atravesar todo el sistema de archivos.
fuente
para búsqueda de archivos
find / -xdev -name settings.xml
-> computadora completafind ./ -xdev -name settings.xml
-> directorio actual y su subdirectoriopara archivos con tipo de extensión
fuente
Me sorprende ver que localizar no se usa mucho cuando vamos de forma recursiva.
Primero haría una búsqueda de "$ PWD" para obtener la lista de archivos en la carpeta de interés actual, y luego ejecutaría greps en ellos como quisiera.
Por supuesto, esto supone que la actualizaciónb se realiza y el índice se actualiza periódicamente. Esta es una forma mucho más rápida de encontrar archivos que ejecutar un hallazgo y pedirle que baje del árbol. Mencionando esto para completar. Nada en contra de usar find, si el árbol no es muy pesado.
fuente
locate "$PWD*.mp4"
Sólo para recordar que usted puede ser capaz de saltar elgrep
El siguiente comando ayuda a buscar cualquier archivo
1) Independientemente del caso
2) Resultado Excluir carpetas sin permiso
3) Buscar desde la raíz o desde la ruta que desee. Cambiar / con la ruta que prefieras.
Sintaxis:
find -iname '' 2> & 1 | grep -v "Permiso denegado"
Ejemplo
fuente
find / -iname '*C*.xml' 2>/dev/null
Si desea buscar un archivo especial con comodín, puede usar el siguiente código:
Supongamos que desea buscar todos los archivos .conf desde aquí:
.
significa búsqueda iniciada desde aquí (lugar actual)-type
significa tipo de elemento de búsqueda que aquí es el archivo (f).-name
significa que desea buscar archivos con nombres * .conf .fuente
Esto buscará todos los archivos relacionados en los directorios actuales y secundarios, calculando su recuento de líneas por separado y totalmente:
fuente
Utilizar
Explicación
find
hace recursividad.-o
soportes para-or
. Entonces, arriba significa buscar este comodín O este. Si solo tiene un patrón, entonces no necesita-o
.fuente