with traduccion recursive grep

traduccion - grep with wildcard



¿Cómo "grep" para un nombre de archivo en lugar de los contenidos de un archivo? (7)

Puede encontrar la ruta completa de un archivo usando grep, simplemente pipe la salida del árbol

tree -f | grep filename

Aquí hay una función que puede poner en su .bash_profile o .bashrc

findfile(){ tree -f | grep $1; } # $1 = filename, -f is full path

grep se usa para buscar dentro de un archivo para ver si alguna línea coincide con una expresión regular determinada. Sin embargo, tengo esta situación: quiero escribir una expresión regular que coincida con el nombre del archivo (y no con el contenido del archivo). Lo ejecutaré desde el directorio raíz del sistema, para encontrar todos los archivos que coincidan con la expresión regular.

Por ejemplo, si quiero encontrar todos los archivos de formulario VB que comienzan con una "f" y terminan con .frm, usaré la expresión regular -

"f[[:alnum:]]*/.frm"

¿Puede grep hacer esto? Si no, ¿hay alguna utilidad que me permita hacer esto? Gracias.


Como dijo Pablo, necesitas usar find lugar de grep , pero no es necesario conectarlo a grep . find tiene esa funcionalidad incorporada:

find . -regex ''f[[:alnum:]]/.frm''

find es un programa muy potente para buscar archivos por nombre y admite la búsqueda por tipo de archivo, limitación de profundidad, combinación de diferentes términos de búsqueda con operaciones booleanas y ejecución de comandos arbitrarios en archivos encontrados. Consulte la página de búsqueda de hombre para obtener más información.


Necesita usar find lugar de grep en este caso.

También puede usar find en combinación con grep o egrep :

$ find | grep "f[[:alnum:]]/.frm"


No, grep funciona bien para esto:

grep -rl "filename" [starting point] grep -rL "not in filename"


También puedes hacer:

tree | grep filename

Esto canaliza la salida del comando tree para grep para una búsqueda. Sin embargo, esto solo le dirá si el archivo existe.


Ejemplo

find <path> -name *FileName*

Del manual:

patrón de buscar-nombre

La base del nombre del archivo (la ruta con los directorios principales eliminados) coincide con el patrón del patrón del shell. Debido a que se eliminan los directorios principales, los nombres de archivo considerados para una coincidencia con -name nunca incluirán una barra inclinada, por lo que "-name a / b" nunca coincidirá con nada (es probable que necesite utilizar -path en su lugar). Los metacaracteres ("*", "?" Y "[]") coinciden con un "." al comienzo del nombre base (esto es un cambio en find- utils-4.2.2; ver la sección NORMAS DE CONFORMIDAD a continuación). Para ignorar un directorio y los archivos debajo de él, use -prune; vea un ejemplo en la descripción de -path. Los apoyos no son reconocidos como especiales, a pesar del hecho de que algunos proyectiles incluyendo Bash imbuyen llaves con un significado especial en los patrones del caparazón. La coincidencia de nombre de archivo se realiza con el uso de la función de biblioteca fnmatch (3). No olvides encerrar el patrón entre comillas para protegerlo de la expansión del caparazón.


find -iname "file_name" Syntax :- find -type type_descriptor file_name_here

type_descriptor types: -

f: archivo regular

d: directorio

l: enlace simbólico

c: dispositivos de caracteres

b: bloquear dispositivos