Tag: Linux

Rimuovere o modificare parte di nome su più file in bash

Una ricetta reve breve ma utile.

Dobbiamo rinominare una serie di file e rimuovere una parte del nome:

screenshot-primo.png
screenshot-secondo.png
screenshot-terzo.png
screenshot-quarto.png
screenshot-quinto.png

rimuoviamo una parte del nome (screenshot-) così:

for x in screenshot-*.png; do
echo $x | sed -r 's/screenshot-(.+)\.png/mv -v "\0" "\1.png"/';
done | sh -e

per tranquillità possiamo rimuovere l’ultima parte del comando (sh -e) per controllare quello che cerca di fare lo script.

se abbiamo, nel nome, anche una parte variabile da modificare possiamo utilizzare il carattere “.” per ogni lettera del nome.

Per esempio, per rinominare questi file:

100-immagini-primo.png
101-immagini-secondo.png
102-immagini-terzo.png
201-immagini-quarto.png
202-immagini-quinto.png

useremo questo script:

for x in *-immagini-*.png; do
echo $x | sed -r 's/...-immagini-(.+)\.png/mv -v "\0" "\1.png"/';
done | sh -e

fatto!

🙂

ISC DHCP e log dei lease

Ecco come fare per loggare i client che richiedono un ip al nostro server dhcp in modo moooolto elegante!

nel file /etc/dhcp/dhcp.conf si aggiunge una direttiva come questa:

on commit {
  set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
  set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
  log(concat("Commit: IP: ", ClientIP, " Mac: ", ClientMac));
  execute("/root/scripts/dhcp-event", "commit", ClientIP, ClientMac);
}

e poi creiamo un semplice script (/root/scripts/dhcp-event):

#!/bin/bash
date=$(date)
echo "date: "$date >> /tmp/dhlog
echo "orig: "$1 >> /tmp/dhlog
echo " ip: "$2 >> /tmp/dhlog
echo " mac: "$3 >> /tmp/dhlog
a=$(host $2)
name=$(echo $a | cut -d" " -f5)
echo "name: "$name >> /tmp/dhlog

a questo punto è banale prendere questi dati e metterli su un database oppure generare la lista di conversione ip/nomi per sarg (così, tanto per fare un esempio…)

le direttive che possiamo usare (in modo pressochè identico) sono:

– on commit
– on release
– on expiry

🙂

a.