Estoy tratando de encontrar una manera de escanear todo mi sistema Linux para todos los archivos que contienen una cadena de texto específica. Solo para aclarar, estoy buscando texto dentro del archivo, no en el nombre del archivo.
Cuando estaba buscando cómo hacer esto, me encontré con esta solución dos veces:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Sin embargo, no funciona. Parece mostrar todos los archivos del sistema.
¿Está esto cerca de la forma correcta de hacerlo? Si no, ¿cómo debería? Esta capacidad de encontrar cadenas de texto en archivos sería extraordinariamente útil para algunos proyectos de programación que estoy haciendo.
-H
con -l
(y tal vez grep
con fgrep
). Para excluir archivos con ciertos patrones de nombres que usaría find
de una manera más avanzada. Sin embargo, vale la pena aprender a usar find
. Justo man find
.
find … -exec <cmd> +
es más fácil de escribir y más rápido que find … -exec <cmd> \;
. Funciona solo si <cmd>
acepta cualquier número de argumentos de nombre de archivo. El ahorro en el tiempo de ejecución es especialmente grande si <cmd>
se inicia lentamente, como los scripts de Python o Ruby.
grep "pattern" path/*.txt
.
como un comodín de un solo carácter, entre otros. Mi consejo es usar siempre fgrep o egrep.