Dic 23 2009

Perl para reemplazar cadenas de texto en archivos

Aquí un tip rápido para buscar cadenas de texto dentro de un patrón de ficheros o también para uno solo. Por ejemplo, si tenemos 100 ficheros que en algún lugar en su interior contienen una cadena que queremos reemplazar, nos hará el trabajo pesado en un par de segundos.

Esta es la sintaxis:

perl -pi -e ’s/cadena vieja/cadena nueva/g’ patron

Un ejemplo practico seria:

perl -pi -e ’s/index.html/index.php/g’ *.html

  • Share/Bookmark

Dic 9 2009

Compartir autmomaticamente disco duro externo al conectar en Windows

Se me hace molesto, que al conectar un disco duro se pierda la configuración que uso para compartirlo en mi red local. El volver a compartirlo después de un par de veces se vuelve un proceso molesto y poco práctico, por lo que me propuse averiguar qué podía hacer al respecto.

La solución es bastante simple, lo que hice (es probable que exista otro método más práctico) fue cambiar la letra de la unidad, crear un archivo “autorun.inf” dentro del disco con un icono de famfamfam, escribir un script en VBScript y Voilá! Con esto cuando insertes el disco duro, te dará la opción de ejecutar una tarea que dice “Compartir”.

A continuación el procedimiento paso a paso:

Lo primero, es dar botón derecho a Mi PC desde el menú de inicio y seleccionar la opción de “Administrar”.

1

Después sobre el árbol de opciones de la izquierda, seleccionamos “Administración de Discos” y damos click sobre el panel de la derecha en el nombre del disco duro al que queremos cambiar la letra de acceso a la unidad. En mi caso elegí M:\ ya que en mi opinión, es difícil que algún otro dispositivo ó drive llegara a ocupar la misma letra.

2

3

Lo que sigue, es ir a la unidad en cuestión, desde Mi PC o el explorador de Windows y crearemos un archivo llamado autorun.inf en el que pondremos lo que siguiente:

[autorun]
icon=hd.ico
label=Mi HD
open=wscript.exe share.vbs
action=Compartir Disco

A continuación, descargamos el icono que aquí les dejo, que conseguí en famfamfam o el que ustedes elijan, solo recuerden que deberá ser en formato .ico y lo pondremos en la raíz del disco duro.

Icono de HD

Por utlimo, crearemos un archivo llamado “share.vbs” en donde escribiremos algo como esto:

Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = 25
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
errReturn = objNewShare.Create _
("M:\", "Compartido", FILE_SHARE, _
MAXIMUM_CONNECTIONS, "Public share for the Finance group.")
wscript.echo "Se ha compartido el Disco duro"

En donde debemos prestar especial atención a la línea 8, porque en mi caso use M:\ como unidad, esto podría variar para ustedes y el nombre del directorio compartido a mostrar es “Compartido”.

Ahora expulsamos el disco y lo insertamos de nuevo y veremos el resultado:

4

Si elegimos la opcion de que recien hemos creado, el disco se montara automaticamente y nos lo avisara con un mensaje como este. (Si no quieren ver el mensaje, solo remuevan la utlima linea de “share.vbs” la que dice wscript.echo “Se ha compartido el Disco duro”)

5

Si queremos verificar, en Mi PC veremos algo asi: (A veces en necesario dar boton derecho en algun area en blanco de Mi PC y  en “Actualizar”).

6

  • Share/Bookmark

Jul 20 2009

Buscar archivos de 6 meses de antiguedad

Aqui un tip rapido sobre como buscar, enlistar y eliminar archivos de algunos meses de antiguedad en nuestro sistema, esto es util para los casos como el mio, que necesito depurar una “papelera de reciclaje” en un directorio compartido mediante Samba.

Lo que necesito hacer es:
“Encontrar archivos eliminados hace 6 meses, crear un listado de cuales se eliminaran y por ultimo, eliminarlos”

Para esto, crearemos un script que se ejecutara el primer dia de cada mes.

Primer paso:

Crearemos un directorio en /var/log para almacenar nuestros logs, le llamaremos “cleaner”

sudo mkdir /var/log/cleaner

Ahora creamos un fichero en cualquier directorio, por ejemplo /root:

sudo vim /root/script_6meses

Dentro de este pondremos algo asi:

#!/bin/bash
echo “Buscando archivos…”
find /ruta/a/buscar -ctime +180 -type f -exec echo ‘Archivo eliminado: {}’ >> /var/log/cleaner/cleaner-$(date +_%m_%d_%Y).log \; find /1TBA/ -ctime +190 -type f -exec rm {} \;

Analicemos un poco estas lineas:
En la primera, se le dice a l comando find (buscar), que busque en el directorio que nosotros definamos, los archivos que tengan mas de 180 dias de antiguedad (-ctime +180) esto lo podemos ajustar a nuestras necesidades. Despues le ordenamos que con los archivos que encontro, nos cree un arvhivo de log con la fecha del dia en que se ejecuto el comando.

La segunda linea, hace practicamente lo mismo, solo que en lugar de ejecutar el llenado del log, elimina los archivos. Si solo queremos eliminar y no guardar un registro de los archivos eliminados, bastara con poner la segunda linea del script.

Segundo paso:

Es practico utilizar crontab para automatizar nuestras tareas, por lo que crearemos una entrada que obligara a este script a corre cada mes, para esto ejecutamos en la terminal

sudo crontab -e

Lo que nos mostrara un editor de texto con los corns que ya existen, sin importar esto, escribimos en la ultima linea:

52 6  1 * *   root    /root/script_6meses

Esto, solo esta diciendo que, los primeros de cada mes a las 6hrs se ejecutara nuestro script.

Eso es todo, si tienen algun tip para mejorarlo, adelante, sus comentarios son bienvenidos.

  • Share/Bookmark