Linux busca nombres de archivos con una cadena dada

107

Estoy en Ubuntu y me gustaría encontrar todos los archivos en el directorio actual y los subdirectorios cuyo nombre contiene la cadena "John". Sé que greppuede coincidir con el contenido de los archivos, pero no tengo idea de cómo usarlo con los nombres de los archivos. Cualquier ayuda sería apreciada.

JJ Beck
fuente

Respuestas:

195

Utilice el comando de búsqueda ,

find . -type f -name "*John*"
Rich Adams
fuente
1
Crear un script de bash personalizado con #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi le permitiría ejecutarlo F search-stringcomo un acceso directo perfecto
Ilia Rostovtsev
@IliaRostovtsev - agradable, pero [ -z "$1" ]sería un poco mejor.
Joe
@Joe Ah, cierto. ¿Quieres decir en caso de que un camino tenga espacios? Pero aquí solo verificamos la existencia de un espacio de $ 1 que haría aparecer $ 2 y eso es todo. Quieres decir que es teóricamente mejor, ¿verdad?
Ilia Rostovtsev
@IliaRostovtsev - En realidad, estaba equivocado. Si $ 1 es nulo, la prueba se convierte en if [ -z ]. Pensé que sería un error de sintaxis, pero funciona. Puedo simplificar parte de mi código de ahora en adelante.
Joe
25

Ya se ha proporcionado una respuesta correcta, pero para que aprenda a ayudarse a sí mismo, pensé en incluir algo útil de otra manera; Si puede resumir lo que está tratando de lograr en una palabra, hay una excelente función de ayuda en Linux.

man -k <your search term>

Lo que hace es enumerar todos los comandos que tienen su término de búsqueda en la descripción breve. Por lo general, es muy probable que encuentres lo que buscas. ;)

Esa salida a veces puede ser algo abrumadora, y recomendaría reducirla a los ejecutables, en lugar de a todas las páginas de manual disponibles, así:

man -k find | egrep '\(1\)'

o, si también desea buscar comandos que requieran niveles de privilegios más altos, como este:

man -k find | egrep '\([18]\)'
tink
fuente
3
Tengo curiosidad ... una pregunta que no muestra ningún intento de resolver el problema en cuestión a través de una búsqueda obtiene un voto a favor, una explicación amistosa sobre cómo averiguar acerca de los posibles comandos es pisoteada. Cuales son los criterios? :)
tink
1
Te voté a favor. La lección es que pocos pueden manejarla. pero podemos ver muestras y adaptar :)
tgkprog
2

El findcomando llevará mucho tiempo porque analiza archivos reales en el sistema de archivos.

La forma más rápida es usar el locatecomando, que dará un resultado de inmediato:

locate "John"

Si no se encuentra el comando, primero debe instalar el mlocatepaquete y ejecutar el updatedbcomando para preparar la base de datos de búsqueda por primera vez.

Más detalles aquí: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

Thucnguyen
fuente
1

utilizar ack es simple. Sólo tipoack <string to be searched>

Annu
fuente
Parece que esto también incluirá todas las rutas que contienen el texto de búsqueda, no solo los archivos: stackoverflow.com/questions/7698867/…
underscore_d
1

Esta es una solución muy simple que usa el treecomando en el directorio que desea buscar. -fmuestra la ruta completa del archivo y |se usa para canalizar la salida del árbol greppara encontrar el archivo que contiene la cadena filenameen el nombre.

tree -f | grep filename
caylus
fuente