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
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
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
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
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
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 ?”