grep se usa para buscar dentro de un archivo para ver si alguna línea coincide con una expresión regular dada. Sin embargo, tengo esta situación: quiero escribir una expresión regular que coincida con el nombre del archivo en sí (y no con el contenido del archivo). Ejecutaré esto desde el directorio raíz del sistema, para encontrar todos los archivos que coinciden 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.
-regex
opción.Ejemplo
Del manual:
patrón de buscar nombre
La base del nombre del archivo (la ruta con los directorios iniciales eliminados) coincide con el patrón de patrón de shell. Debido a que los directorios iniciales se eliminan, 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 (probablemente deba usar -path en su lugar). Los metacaracteres ("*", "?" Y "[]") coinciden con "." al comienzo del nombre base (esto es un cambio en find-utils-4.2.2; vea la sección CONFORMIDAD DE ESTÁNDARES 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 brackets no se reconocen como especiales, a pesar del hecho de que algunos shells, incluido Bash, imponen brackets con un significado especial en los patrones de shell. La coincidencia de nombre de archivo se realiza con el uso de la función de biblioteca fnmatch (3). No olvide encerrar el patrón entre comillas para protegerlo de la expansión del shell.
fuente
find . -maxdepth 1 -name "*filename*" -print
Como dijo Pablo, debe usarlo en
find
lugar de hacerlogrep
, pero no es necesariofind
hacerlogrep
.find
tiene esa funcionalidad incorporada:find
es un programa muy poderoso para buscar archivos por nombre y admite búsquedas por tipo de archivo, limitación de profundidad, combina diferentes términos de búsqueda con operaciones booleanas y ejecuta comandos arbitrarios en archivos encontrados. Consulte la página del manual de búsqueda para obtener más información.fuente
-mtime
-mmin
Puede encontrar la ruta completa de un archivo usando grep, solo canalice la salida del árbol
Aquí hay una función que puede poner en su .bash_profile o .bashrc
fuente
tipos type_descriptor: -
f: archivo normal
d: directorio
l: enlace simbólico
c: dispositivos de caracteres
b: bloquear dispositivos
fuente
-type typedescriptor
solo. ¿Es esto un error?También puedes hacer:
Esto canaliza la salida del comando del árbol a grep para una búsqueda. Sin embargo, esto solo le indicará si el archivo existe.
fuente
No, grep funciona bien para esto:
fuente
-l
y-L
considerablemente.También para múltiples archivos.
fuente
La forma más fácil es
aquí find enumerará todos los archivos en el directorio (.), es decir, actual, de forma recursiva. Y luego es solo un simple grep. Aparecerán todos los archivos cuyo nombre tiene "prueba".
Puedes jugar con grep según tus necesidades. Nota: Como grep es una clasificación de cadena genérica, puede dar como resultado no solo nombres de archivo. pero si una ruta tiene un directorio ('/xyz_test_123/other.txt') también vendría al conjunto de resultados. salud
fuente
./foo/bar/latest/fred.txt
.