oriolrius.cat

Des del 2000 compartiendo sobre…

Tag: script

bar: linies de progrés per bash

Reading time: 1 – 2 minutes

Una eina senzilla i útil, a més programada totalment en shell script que encara té més merit. Servei per fer coses tan vistoses com un línia de progrés mentre fem un tar, cp, etc.

Una imatge val més que mil paraules…

bar.png

És fàcil i vistosa, oi que si? en l’exemple es veu com descomprimeixo la pròpia eixa amb una barra de progrés generada per ella mateixa.

Doneu un cop d’ull a la web, a mi m’ha agradat molt l’eina i l’he usat per fer un CD d’instal·lació d’una eina de la feina. Per si la web deixés d’existir, que això ja passa amb aquest tipus d’eines deixo una còpia del programa a l’article: bar-1.4.tar.bz2.

Shell Script: backup dels repositoris de subversion

Reading time: 2 – 2 minutes

La setmana passada vaig fer un petit shell script per fer backup dels repositoris de software del meu servidor. Bàsicament el que fa és mirar a /var/svn/repos quins directoris hi ha. Llavors llença un svnadmin dump i al mateix temps comprimeix amb bzip2 la sortida cap a un fitxer, després aquest fitxer es guarda a /home/backup/subversion que és una unitat de xarxa montada per fer backups en el servidor. L’últim detall que em fa falta comentar és que després de fer la còpia del fitxer, deixa 3 fitxers de cada repositori al directori de backup i la resta els borra. D’aquesta forma tinc 3 còpies de cada un dels repositoris, una d’ahir, l’altre d’abans d’ahir i finalment una de fa 3 dies. Així si passa algún desastre d’incosistència o algo semblant tinc més marge per recuperar el repositori.

Veureu que el codi és molt simple i si algú el vol adaptar no crec que li costi gaire, tot esta programat amb ordres típiques, sense comandes rares ni res. Finalment l’únic que he hagut de fer és posar-lo al cron a alguna hora de matinada.

#!/bin/sh
BASE="/var/svn/repos"
DATA=`date "+%Y%m%d"`
cd $BASE
REPOSS=`find . -maxdepth 1 -mindepth 1 -type d | cut -f 2 -d "/"`
BACKUPDIR="/home/backup/subversion"
for REPOS in $REPOSS
do
        BACKUPFITXER=backup-repos-$REPOS
        FITXER=$BACKUPFITXER-$DATA.dump.bz2
        echo -n "Starting $REPOS backup..."
        svnadmin dump -q $BASE/$REPOS | bzip2 > $FITXER 2>/dev/null
        mv $FITXER $BACKUPDIR
        cd $BACKUPDIR
        rm -f `ls -t $BACKUPFITXER* | sed -e 1,3d` 2> /dev/null
        echo "OK"
        cd $BASE
done

mini-script per llistar tots els fitxers menys els ‘n’ més nous

Reading time: < 1 minute

La idea: volem tenir un directori amb els n fitxers més nous, la resta s’han d’anar borrant… l’script d’allò més senzill: (suposem n=10)

rm -f `ls -t | sed -e '1,10d'`

Si la llista de fitxers a borrar és massa llarga també podriem fer:

for F in `ls -t | sed -e '1,10d'`; do rm -f $F; done

Exemple d’aplicació: per guardar al repositori de correu com a backup els útlims n emails rebuts i anar borrant la resta.

Un petit, ràpid i bon manual de sed el podeu trobar a Selectorweb.com. (local )

Buscar fitxers amb el contingut duplicat en linux…

Reading time: 1 – 2 minutes

Sovint costa trobar eines o petits scripts que fassin coses aparenment tan estupides com la comentada. De fet per windows he trobat alguns programes que tenen bona pinta tot i que no els he provat encara. Però per linux m’ha costat una mica més fins que he trobat el fdupes (local). Esta programat en C i realment és molt senzill d’usar i força potent.

També he trobat un petit script en bash que fa una busqueda força rudimentaria però útil en alguns casos:

OUTF=rem-duplicates.sh;
echo "#! /bin/sh" > $OUTF;
find "$@" -type f -print0 |
  xargs -0 -n1 md5sum |
    sort --key=1,32 | uniq -w 32 -d --all-repeated=separate |
    sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF;
chmod a+x $OUTF; ls -l $OUTF

La pàgina on he trobat aquest script és Unix shell script for removing duplicate files.

bash tip: buscant fitxers més nous que…

Reading time: < 1 minute

Petit apunt de sintaxis del find. Com buscar els fitxers creats a partir d’una data.

Primer creem un fitxer amb la data de referència a partir de la que volem fer la busqueda:

touch -t 05231500 fitxer_dataref

Ara busquem els fitxers més nous que el fitxer fitxer_dataref:

find . -newer fitxer_dataref -type f -print

Aquesta tonteria va molt bé envendir-la en petits scripts per borar els fitxers esmentats, per exemple:

for F in `find . -newer fitxer_dataref -print`; do rm $F; done