que hay de malo con la simplicidad ?


Viendo el blog de gnuget me encontré con algo chistoso.


for i in $(find . | grep -v svn );
do
if test -f $i
then
sed s/word1/word2/g $i > $i.tmp && mv $i.tmp $i
fi
done

Gunnar lo “simplifica” (con todo respeto para alguien a quien admiro mucho) con:
find . |grep -v svn |xargs perl -p -i -e ‘s/word1/word2/g’

Pero seria tan sencillo como:
find . -type file -exec sed s/word1/word2/g {} \;

No necesitas mas que find, no es necesario xargs, y mucho menos meterle perl.

Posteo en mi blog, pq traté de poner el comentario en el blog de gnuget y me dá un error (segundo blog en el mismo día en el que pasa lo mismo).

A veces vale la pena leer el man con un poco de detalle para no tener que hacer complejo algo que no es necesario que lo sea.

Lo dice alguien que es bastante malo para hacer las cosas bien.


5 Comments, Comment or Ping

  1. Gunnar

    Sí hace falta, para:
    – Ignorar los archivos en los directorios .svn
    – Generar archivos de respaldo con el contenido original
    Claro, TIMTOWTDI 😉 (aunque también, YAGNI)

    July 11th, 2008

  2. garaged

    Creo que si find no pudiera ignorar archivos sería bastante gacho, pero lo puede hacer, y sed te genera una copia si usas -i con un argumento, por lo que también puede hacer una copia exclusivamente con find y sed.

    ejemplo:
    $ cat tmp.sh
    find . -name .svn -prune -o -type f -exec sed -i\-old -e s/var2/var22/g {} \;

    Incluso me dí el lujo de probar que funciona 🙂

    Claro, yo agregaría un -name “*.ext” para solo sustituir aquellos archivos relevantes, no todos los editables, pero bueno, eso ya eso cosa de implementación.

    Estoy de acuerdo que mi solución final es batante rara, y me parece que solo con la práctica lo recordaría sin tener que ver el manual, pero pues vale la pena recordar detallitos como este para cuando se necesitan no ?

    Como dices Gunnar, hay mas de una solución, y tambien es común que haya una solución mejor que la que estamos usando 🙂
    y sobre todo DRY ! 😛

    UPDATE

    Habia puesto una linea que tenia una parte no necesaria, y dificil de recordar, actualicé el post con una simplificacion bastante buena.

    July 14th, 2008

  3. Gnuget

    No es que haya algo de malo con la simplicidad, sino es mas bien dedicado a mi inexperiencia en bash :p

    Digo, regularmente tengo una carpeta de scripts para hacer las cosas mas automáticas, pero veo que me falta experiencia en el ramo.

    July 14th, 2008

  4. garaged

    gnuget, yo soy medio mamón, pero no es que piense que sea malo hacer las cosas ligeramente más complicadas, y obviamente nadie sabe todo, en este caso por ejemplo puedes usar n herramientas, desde perl, awk, python, hasta puro shell, pero a veces los desarrolladores tienen más sentido común del que sospechamos, con solo find y sed puedes hacer lo mismo que puedes hacer con un ciclo en bash, que usa find, luego grep, y hace la sustitucion en perl o sed o awk, solo hay que darse una vuelta por el manual de find y sed 🙂

    Creo que esto nos enriquece a todos.

    July 14th, 2008

  5. HD

    Excelente uso de find, mi estimado Garaged. Yo agregaria a la lista de acrónimos el siguiente: KISS

    July 22nd, 2008

Reply to “que hay de malo con la simplicidad ?”