¿Cómo puedo contar la cantidad de archivos (en un directorio) que contienen una cadena dada como entrada en bash / sh?
¿Cómo puedo contar la cantidad de archivos (en un directorio) que contienen una cadena dada como entrada en bash / sh?
Respuestas:
grep -l "string" * | wc -l
buscará "cadena" en el contenido de todos los archivos en el directorio de trabajo y le dirá cuántos coinciden.
grep -lr "string" directory | wc -l
si no desea una búsqueda recursiva, puede usar la opción find con maxdepth: tenga en find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
cuenta que esta segunda opción es más lenta que grep.
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Aclaración: Esto busca el número de archivos que tienen el "patrón_para_ver_para" en su contenido y no en sus nombres de archivo (como la respuesta de Wag). A partir de su pregunta, es difícil saber lo que está buscando.
find . ! -name . -prune -type f
(no se pierda los backticks). Este comando solo enumera los archivos en la carpeta.
Esto funciona en Bash con cualquier nombre de archivo:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Explicación:
grep
La -Z
opción 'imprime cada resultado con un separador de ␀ bytes. Este carácter no puede ser parte del nombre de un archivo, por lo que simplemente podemos contar la cantidad de separadores para obtener la cantidad de archivos.tr
.wc
.