Script per conservare gli n file più recenti in una dir

Mi è capitato di voler tenere traccia di operazioni effettuate da script con dei file di log. Se si chiama il file di log con un nome tipo anno-mese-giorno (es:script1_AAAAMMGG.log) il numero di log cresce continuamente.

Con questo script che lancio periodicamente, vengono conservati i solo gli ultimi n file più nuovi.

Utilizzo:
keepnewestonly.sh [directory to check] [opt:maxnum] [opt:filepattern] [opt:T (testonly)]

dove

  • il primo parametro è la directory in cui effettuare la pulizia
  • il secondo (opzionale, default =20) è il numero di file che si vogliono conservare

Errore: Argument list too long

Può capitare utilizzando comandi come cp, mv, rm di ricevere il seguente messaggio di errore:

/bin/cp: Argument list too long.

Anzichè complicarci la vita, andando a modificare le impostazioni del sistema, possiamo utilizzare il find.

Per esempio se abbiamo un grande numero di file tempranei in una cartella, tutti con estensione ‘.dieg’, li possiamo cancellare (o spostare o copiare o quello che vogliamo) in questo modo:

find ./ -name '*.dieg' -exec rm -r -v {} \;

Maggiori informazioni digitando

comandi utili da terminale

  • elenca tutti i file aperti sul sistema
    lsof
    esempio: lsof | grep access.log

  • crea un link simbolico a [target] chiamato [lnkname]
    ln -s [target] [lnkname]

  • copia via ssh da riga di comando
    scp -r user@server_name:/home/user/* /home/localuser/

  • user e password

    AGGIUNTA (come root)
    useradd [-d home_dir] [-G group[,...]] [-s shell] loginname
    MODIFICA PW
    passwd loginname

Uso del TAR (NON è il tribunale amministrativo regionale!)

Esempi tipici di utilizzo del tar:

comprimere (z=filter with gzip)
tar zcvf /path/pippo.tar.gz /path2/*_200603??.log
Come si vede sono ammessi i caratteri jolly. Attenzione a non invertire gli argomenti! Altrimenti il primo file dell’elenco dei file che si vogliono archiviare viene inesorabilmente PERSO.

testare il contenuto del file
tar ztf /path/pippo.tar.gz

scompattare
tar zxvf /path/pippo.tar.gz [FILTRO]
NB: il secondo argomento (opzionale) non è la destinazione dei file decompressi, ma il pattern dei file all’interno del tarball da estrarre. La dir di destinazione è sempre “./”.

Bash, condizioni: elenco dei parametri

Ecco un esempio per interrompere un batch in mancanza del primo argomento:

#!/bin/bash
if [ -z "$1" ]; then
echo usage: $0 directory
exit
fi

Più in generale i test possibili in un file batch sono (perdonatemi l’inglese, ma la trduzione sarebbe un po’ infelice…):

-a file -> True if file exists
-b file -> True if file exists and is a block special file
-c file -> True if file exists and is a character special file
-d file -> True if file exists and is a directory
-e file -> True if file exists

PHP command line interface

Per poter lanciare script php da terminale è necessario che ci sia installato il PHP CLI.
Su sistemi debian/ubuntu il pacchetto attuale si chiama php4-cli, per cui prima verifichiamo che sia installato.

php -v

Se installato viene visualizzata la versione di PHP installata, in caso contrario generea un errore.

Per installarlo:

apt-get install php4-cli

BASH: bad interpreter: No such file or directory

Se lanciando uno script bash si ottiene l’errore

bad interpreter: No such file or directory

potrebbe essere un problema di path, cioè non è stato trovato il bash (o il dialetto utilizzato) e bisogna esplicitarlo oppure il file è stato preparato con gli “a capo” stile windows (\r\n) anzichè stile unix (\n).

In questo secondo caso, per risolvere il problema, editare con “vim” e lanciare il comando

:set fileformat=unix