Categorías
Linux y Software Libre

Buscar y eliminar archivos en una sola línea con find.

find es de esos comandos en linux que demuestran el poder de la terminal de Linux. Se que a veces no parece lo más intuitivo, pero si se domina correctamente, una sola línea en la terminal ahorra mucho tiempo.

Tratando de economizar algo de espacio en varios discos duros me encontré con esos archivitos Thumb.db. Estos archivos generados automáticamente (creo que desde Windows XP) contienen las miniaturas de las imágenes de una carpeta. Entiendo que tienen su propósito, pero en Linux no los ocupo.

Menciono a los archivos Thumb.db como ejemplo, pero este consejo se puede aplicar a cualquier grupo de archivos que pueda encontrar find.

Busca y encuentra.

No es mala idea primero buscar los archivos que se quieren eliminar, digo, solo por seguridad, no vaya a ser que en el primer intento se eliminen archivos que quieres conservar.

Supongamos que quieres buscar en una carpeta con Imágenes todos los archivos Thumbs.db, entonces tecleamos:

find /MiCarpetaConImagenes -name "Thumbs.db"

y te dará como resultado todos los archivos (incluyendo la ruta) que encontró.

/MiCarpetaConImagenes/Carpeta1/Thumbs.db
/MiCarpetaConImagenes/Carpeta2/Thumbs.db
/MiCarpetaConImagenes/Carpeta3/Thumbs.db
.
.
.
/MiCarpetaConImagenes/CarpetaN/Thumbs.db

Si todo parece correcto, entonces pasamos al siguiente paso.

Busca y destruye.

Si quieres eliminar los archivos que encontraste, entonces agrega esto al final de tu comando de búsqueda.

-exec rm -rf {} \;

De esa forma, la instrucción quedaría más o menos así:

find /MiCarpetaConImagenes -name "Thumbs.db" -exec rm -rf {} \;

Y si ejecutan la búsqueda nuevamente, lo más probable es que ya no arroje resultados, pues porque esos archivos ya fueron eliminados.

La opción delete.

En las versiones más modernas de find existe la opción -delete que borra los archivos que encuentra, pero si no funciona, pueden usar el consejo anterior.

Dicho esto, en lugar de agregar la opción -exec con sus argumentos, basta con incluir la opción -delete para borrar los archivos y si quieres ver cuales son los archivos eliminados añade la opción -print.

find /MiCarpetaConImagenes -name "Thumbs.db" -delete -print

Busca y actúa

Como verán find abre un montón de posibilidades. Se pueden buscar archivos para borrarlos, copiarlos, moverlos, jugar con expresiones regulares, bueno, lo que guste y mande. Hay una parte de búsqueda y otra de acción. Lo que quieran hacer con los archivos es posible.

Eliminar archivos de respaldo antiguos

Por ejemplo, se me ocurrió incluir en mi script de respaldos una rutina que elimine los archivos con una antigüedad mayor de 90 días.

find /CarpetaRespaldos/ -type f -mtime +90 -delete -print

El manual de find es muy completo, se los dejo para futuras referencias.

Imagen de David Pennington en Unsplash.

Categorías
Linux y Software Libre

Configurar una impresora LPD en Windows para imprimir desde Linux

Me da vergüenza decirlo, llevo años mandando mis trabajos de impresión a una impresora que usa Windows (no tenía otra alternativa). Y me da más pena decir que durante esos mismos años batallé para que funcionara.

Incluso varios artículos de este blog tratan sobre el tema, como pueden ver en Impresora compartida con samba pide usuario y contraseña o en Problemas al imprimir en una impresora compartida en windows desde linux.

Pero con el tiempo mi equipo se ha ido actualizando y los demás equipos no provocando una serie de incompatibilidades casi siempre relacionadas con el tema de la seguridad.

Siempre había logrado resolver esos problemas invirtiendo una o dos horas, pero ayer llegué al límite. No puedo estar haciendo circo, maroma y teatro cada vez que actualizo mi computadora con manjaro.

Llegó la hora de buscar otra opción.

LPD (Line Printer Daemon)

En algún momento de mi vida ví algo sobre LDP pero lo pasé por alto. Al ver las opciones de conexión que ofrece el asistente de CUPS lo recordé y me puse a investigar sobre el tema.

LPD es un protocolo de red para enviar trabajos de impresión a una impresora remota y se entiende perfectamente con CUPS.

El único problema es que la impresora esta conectada a un equipo con Windows (7 en este caso).

Instalar LPD en Windows.

Afortunadamente LPD esta incluido en Windows pero no esta habilitado por default, para eso hay que instalarlo.

Vamos al Panel de control, luego a la sección de Programas posteriormente a donde dice Activar o desactivar las características de Windows y finalmente activamos la opción que dice Servicio de impresión LPD y eso es todo.

Servicio de impresión LPD

Les recuerdo que en mi caso la impresora ya tenía un nombre de recurso compartido y de hecho, si alguien manda imprimir desde otro equipo en Windows sigue funcionando.

Configurar la impresora en Linux.

Para evitar problemas que he tenido en el pasado, utilizo el configurador de CUPS ( http://localhost:631 ).

Doy de alta la impresora de manera normal, me va a preguntar un nombre, descripción, pero a la hora de especificar la conexión lo hago de la siguiente forma.

lpd://dirección.IP/nombreImpresora

Llegó el momento de la verdad. Si todo salió bien podrán imprimir desde linux en una impresora compartida en un equipo con windows usando LPD en lugar de Samba).

Categorías
Lenguajes de programación

Python Ping, un script que revisa las direcciones IP de tu red

La mejor forma de aprender un lenguaje de programación es tomando un proyecto y resolviendo sus problemas. En el proceso se investiga como hacer las cosas, resolver algunas dudas, depurar el código y probar su funcionalidad.

Soy fan de Python, pero no soy un experto. Python Ping es un programa que toma un archivo CSV (delimitado por comas) que tiene dos datos, una descripción del equipo y su dirección IP.

El programa toma esa información y hace ping, si el equipo responde, muestra un mensaje de OK, de lo contrario, reproduce un sonido y muestra un mensaje de error.

Hace una pausa de 10 minutos y vuelve a empezar. De esa forma es posible detectar problemas en la red, su ubicación y su frecuencia.

En una operación normal, todo debería de estar OK, pero todos sabemos que eso no siempre es así.

El archivo CSV.

Lo bonito de almacenar la información en un archivo CSV es que es muy sencillo de editar, actualizar y mantener.

Para ejemplo de este artículo elegí servidores que todos conocemos:

Archivo servidores.csv

Google , google.com
Bing , bing.com
Facebook , facebook.com
Twitter , twitter.com
Wikipedia , wikipedia.com

Una descripción, luego una coma y al final una dirección. Para el ejemplo puse los dominios, pero se pueden reemplazar por las direcciones IP. Eso lo hago porque a mi me interesa revisar una red local.

Desmenuzando el programa.

Al final del artículo pondré el código completo, aquí voy a ir desmenuzando algunas de las partes del mismo.

Import

import os
import csv
from colorama import Fore
import time
import datetime

Esta es la lista de los import del programa. Para que algunas cosas funcionen es necesario declararlas primero.

os lo utilizo para ejecutar instrucciones como si estuviera en la terminal.

csv para importar la información del archivo CSV en una variable dentro del programa.

colorama le da color, poniendo los errores en rojo, lo que esta bien en verde, los textos en blanco.

time y datetime los uso para formatear algunas salidas de tiempo.

check_ping

La función check_ping es la que hace el trabajo pesado. Quiero hacer notar que en lugar de utilizar el comando ping tradicional uso el comando fping que es más rápido y se adapta mejor cuando se llama desde un script.

La instrucción fping hace 10 reintentos antes de declarar un error de conexión.

sonido_alerta

Esta función es un plus. No voy a estar viendo la pantalla todo el tiempo durante la ejecución del script. Así que si hay un error hace un sonido. Como pueden ver en el código, lo que hace es reproducir un archivo mp3 a su elección.

El loop

El programa se repite indefinidamente en un ciclo haciendo una pausa de 10 minutos. De esta forma está revisando continuamente la red y avisa si hay algún problema. Para terminar el ciclo hay que presionar Control + C y se interrumpe la ejecución.

python_ping en acción

Como pueden ver, el programa es relativamente sencillo. Estoy consciente de que hay muchas cosas que se pueden mejorar, así que estoy abierto a sus comentario. Si desean utilizarlo, lo pueden hacer respetando claro la licencia pública general GNU, que permite utilizar, distribuir y modificar este código.