OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.
Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.
¿Quién me habló?
Os voy a contar mi "problema" con el AMSN y la solución que le dí :)
Resulta que tengo un PC que tiene instalado Mandrake (para mi) y Windows (para mi hermano). Resulta que cuando me voy a algún sitio dejo el PC encendido, con todos los programas abiertos: AMSN, X-Chat...
Pues bueno, algunas veces cuando vuelvo me encuentro al PC en Windows. Eso significa que mi hermano me ha cerrado mi sesión y lo ha reiniciado. Entonces si mientras yo estaba fuerá alguien me habló por el AMSN yo no me entero.
Si no reiniciara entonces me encontraria la ventanita de la conversacion abierta..., pero habiendo reiniciado lo que tendria que hacer es mirar los logs. Y mirar los logs uno por uno para ver cuál cambia... :S
Entonces me vino una idea.
Si en el momento en el que me voy copio los logs de AMSN a una carpeta y cuando vuelvo comparo los logs del AMSN con los logs copiados en el momento de irme... sabría quién me habló.
Pues eso, me hice un script que copìara los logs del AMSN a otra carpeta:
Archivo crear_copias.sh
............................................................................
#este programa crea copias de los logs del amsn
#copiamos los logs a otra carpeta auxiliar
cp /home/luser/.amsn/direccion_correo_com/logs/* /home/luser/.amsn/logs_copia
echo "Los logs han sido copiados correctamente."
#fin del programa
.............................................................................
la carpeta logs_copia la tenemos que crear nosotros a mano. mkdir /home/luser/.amsn/logs_copia
Despues un script que compare los logs reales con los logs de la carpeta que contiene las copias y que guarde la salida del programa en un archivo de texto llamado diferencias.txt :
Archivo comparar.sh
.............................................................................
#este programa compara los logs reales con los logs copia y NO muestra las diferencias (opcion -q)
diff -q -w /home/peratu/.amsn/peratu_hotmail_com/logs/ /home/peratu/.amsn/logs_copia/ > diferencias.txt
echo "Los siguientes archivos han cambiado"
./limpiar
.............................................................................
Si el comando diff no guardara el resultado en un archivo, la salida por pantalla sería más o menos así:
Los ficheros /home/luser/.amsn/direccion_correo_com/logs/contacto1@correo.com.log y /home/luser/.amsn/logs_copia/contacto1@correo.com.log son distintos
Los ficheros /home/luser/.amsn/direccion_correo_com/logs/contacto2@correo.com.log y /home/luser/.amsn/logs_copia/contacto2@correo.com.log son distintos
Los ficheros /home/luser/.amsn/direccion_correo_com/logs/contacto3@correo.com.log y /home/luser/.amsn/logs_copia/contacto3@correo.com.log son distintos
Esto es totalmente valido y satisface nuestras necesidades, pero..., es un poco feo :P
Entonces lo que hago es guardar toda esa salida en un fichero, con lo que no muestra nada por pantalla, y acontinuacion ejecuto un programa que abre el fichero diferencias.txt , y busca las direcciones de correo y las muestra, quedando una salida por pantalla así:
contacto1@correo.com.log
contacto2@correo.com.log
contacto3@correo.com.log
A continuacion os pongo el código del programa limpiar que hace eso (esta en C++):
Archivo limpiar.cpp
..................................................................................
#include #include #include using namespace std; int main(void) { string aux, mail; char aux2; int cont, i; cont=0; i=0; ifstream f; f.open("diferencias.txt"); while(getline(f,aux)) { while(cont<6) { aux2=aux[i]; if(aux2=='/') { cont++; } i++; } aux2=aux[i]; while(aux2!=' ') { mail+=aux2; i++; aux2=aux[i]; } cout << mail << "\n"; cont=0; i=0; mail=""; } return 0; }
..................................................................................
Con esto ya solo tenemos que ejecutar cuando nos vayamos: sh crear_copias.sh
Cuando volvamos: sh comparar.sh
Y ya sabemos quien nos habló en nuestra ausencia.
Lo de limpiar la salida de diff se podría haber hecho con Perl, de hecho, quería hacerlo con Perl, por eso me puse a aprender..., pero cuando me metí en expresiones regualres..., ejem :P
También se podría haber hecho con el comando sed de linux (unix), y pienso intentarlo también con sed :), pero me decidí por C++ porqué es con el que más controlo, nada más.
Si alguien lo hace en Perl, Python, o algún otro y lo quiere poner aquí, por mi perfecto :)
Espero que haya alguien a quién le sirva esto, o al menos le acople para hacer otra cosa que tenia pensada ... en fin, ya me entendéis :)
Un saludo!
Peratu
Usuario
# 804 Ya, pero...
Gracias por la felicitación LinuxBCN.
Respecto a lo de que te pones en ausente y ya está, si, pero..., aunque yo esté en ausente o no disponible, siempre hay gente que te pregunta "estás?" o simplemente te deja algo escrito para que lo leas al volver :)
Un saludo ;)
Peratu
Las preguntas nunca son indiscretas. Las respuestas sí lo son a veces.
Usuario
# 820 gracias...
Hola :)
Antes que nada, gracias por el comando. Me dijeron que lo podria hacer con awk pero como no tengo ni idea... :p Ya veo que si que se podia xDDD
De todas formas, lo he probado y tarda mucho en sacar las direcciones de los archivos que han cambiado. Tarda muchisimo mas que el programa en C++ que hice. No se si eso será normal o que... :S
Otra cosa. Me hago los dos alias. El primero funciona, pero el segundo no. Lo tengo asi:
alias vercambios="diff -q -w /home/peratu/.amsn/peratu_hotmail_com/logs/ /home/peratu/.amsn/logs_copia/ | awk '{print $3}' | awk -F/ '{print $7}'"
y al escribir "vercambios" en una terminal me dice los logs que han cambiado, pero no limpia la salida de diff.
Bueno, eso es todo. Gracias de nuevo :)
Saludos!
Las preguntas nunca son indiscretas. Las respuestas sí lo son a veces.