¿Cómo buscaría en todos los archivos .java una cadena simple (no una expresión regular) en el directorio actual y todos los subdirectorios en Mac OS X? Solo quiero imprimir una lista de nombres de archivos y directorios que coincidan.
¿Cómo buscaría en todos los archivos .java una cadena simple (no una expresión regular) en el directorio actual y todos los subdirectorios en Mac OS X? Solo quiero imprimir una lista de nombres de archivos y directorios que coincidan.
Respuestas:
Y el siempre popular
find . -name '*.java' | xargs grep -l 'string'
EDITAR (por Frank Szczerba):
Si se trata de nombres de archivos o directorios que tienen espacios, la forma más segura de hacerlo es:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Siempre hay más de una forma de hacerlo.
mdfind
es una manera más OSXy de hacer esto !
La respuesta tradicional de UNIX sería la que fue aceptada para esta pregunta:
find . -name '*.java' | xargs grep -l 'string'
Esto probablemente funcionará para archivos Java, pero los espacios en los nombres de archivos son mucho más comunes en Mac que en el mundo tradicional de UNIX. Cuando los nombres de archivo con espacios se pasan a través de la tubería anterior, xargs interpretará las palabras individuales como nombres diferentes.
Lo que realmente quieres es separar nul los nombres para que los límites no sean ambiguos:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
La alternativa es dejar que find ejecute grep por usted, como sugiere Mark, aunque ese enfoque es más lento si está buscando una gran cantidad de archivos (ya que grep se invoca una vez por archivo en lugar de una vez con la lista completa de archivos).
Use el grep que es mejor que grep, ack :
ack -l --java "string"
En realidad, esto usará una expresión regular si lo desea, simplemente manténgase alejado de los metacaracteres o escape de ellos, y puede buscar cadenas.
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
Saltar find
y usar Spotlight
desde la línea de comando. Mucho más poderoso!
FOCO DE LA LÍNEA DE MANDO - ENCUENTRE CON GREP
La mayoría de las personas no saben que puedes hacer búsquedas de Spotlight desde la línea de comandos. ¿Por qué recordar todas las opciones arcanas de búsqueda y grep y qué no cuando puedes dejar que Spotlight haga el trabajo por ti? La interfaz de línea de comando para Spotlight se llama mdfind. ¡Tiene el mismo poder que la búsqueda de GUI Spotlight y más porque es programable en la línea de comando!
Prueba esto:
grep -rl "string" */*java
También podría usar un programa GUI como TextWrangler para hacer una búsqueda más intuitiva de dónde están las opciones en la interfaz.
grep "(your string)" -rl $(find ./ -name "*.java")
Si desea ignorar mayúsculas y minúsculas, reemplace -rl con -irl. (su cadena) también puede ser una expresión regular si alguna vez ve la necesidad.