Controllare la crescita della directory Downloads (o Scaricati)

Premessa

Da un paio di anni, almeno, ho notato una crescente tendenza nella configurazione di default dei moderni browser web; impostare una directory di download predefinita dove salvare tutti i files scaricati durante la navigazione, senza chiedere l’interazione con l’utente.
La directory d’elezione su Gnu/Linux è Download, o Downloads, o Scaricati (a seconda della lingua di installazione e della distro installata).

Il problema

Questa configurazione (che si trova praticamente in tutti i browser, da Firefox a Chromium, da Opera e Rekonq) porta certamente una grande comodità e rapidità in fase di download dei contenuti; il rovescio della medaglia risulta però in una directory di download in continua, esponenziale, crescita.
La soluzione, in questi casi, può essere una pulizia manuale, eseguita ogni tanto e di buon cuore; oppure, potreste decidere di adottare lo script bash qui sotto descritto!

Lo script purgedirectory.sh

Per non dover eseguire noiose pulizie manuali, ho creato questo script, da lanciare ogni tanto oppure – in modo ancor più automatizzato – da inserire nel proprio crontab!

Le dipendenze

Questo script non ha particolari dipendenze, escluso il binario sendemail (da non confondere con il blasonato server SendMail); sendemail è uno script in perl che permette di inviare una mail senza impazzire tra files di configurazione.
Per installare sendemail basta far ricorso al solito apt-get install:

sudo apt-get install sendemail

Funzionamento

Purgedirectory.sh si occupa di controllare la directory target (definita dalla variabile $DirScan), spostando i files la cui data di ultimo accesso sia più vecchia di un mese all’interno di un’apposita directory .trash creata all’occorrenza come sub-dir della directory target. I files vecchi vengono quindi, in un primo momento, spostati (non cancellati!) all’interno della directory $DirScan/.trash.
Eseguita la scansione viene mandata, con sendemail, una mail contenente la lista di tutti i files che sono stati “marcati” per l’eliminazione.
L’eliminazione effettiva viene fatta solo alla  successiva esecuzione dello script, che si occupa di svuotare il contenuto della directory $DirScan/.trash.
In questo modo è possibile manterene la directory dei download sotto controllo, senza il rischio di cancellare automaticamente, per errore, download importanti, dato che l’effettiva cancellazione viene eseguita in un secondo tempo, e se esistono documenti importanti è possibile reuperarli all’interno della directory .trash prima dell’effettiva eliminazione.
Ecco lo script:

#!/bin/bash
#Elimino i file in $DirScan vecchi di un mese

#Impostazione variabili
#Sistemo la variabile bash Internal file separator
IFS=$'\n'

#Variabili per sendemail
mittente="purge@"$(hostname)".it"
destinatario="[email protected]"
server="server_smtp_com:porta"
#Decommentare e compilare se il server smtp richiede 
#l'autenticazione; modificare anche il comando sendemail,
#decommentando la parte relativa all'autenticazione smtp
#smtpuser=""
#smtppwd=""

#Imposto la directory da controllare
DirScan="$HOME/Scaricati"
logfile="/tmp/.purgedirectory.log"
logfile1="/tmp/.purgedirectory.log.1"
#Controllo se esiste $DirScan
if [ ! -d $DirScan ]; then
    echo "non esiste $DirScan"
    exit 1
fi

#Controllo se esiste la directory .trash in $DirScan
#altrimenti la creo
if [ ! -d $DirScan/.trash ]; then
    mkdir $DirScan/.trash
fi

#Svuoto i files presenti in $DirScan/.trash
rm -rf $DirScan/.trash/*

#Ottengo da data di oggi in formato Unix Timestamp
OggiUnixT=`date -u +%s`
#Tolgo un mese
let OldUnixT=OggiUnixT-2592000

for files in `ls $DirScan`; do 
    epocafile=`stat -c %X $DirScan/$files`
    if [ $epocafile -lt $OldUnixT ]; then 
        mv "$DirScan/$files" $DirScan/.trash/
        echo "$files<br>" >> $logfile
    fi
done

if [ -f $logfile ]; then
    echo "<b>Files marcati per l'eliminazione [Directory $DirScan]:</b><hr>" > $logfile1
    cat $logfile >> $logfile1
    echo "<hr><br>I files verranno effettivamente rimossi al prossimo ciclo di pulizia." >> $logfile1
    #Decommentare la seconda parte di questa riga, se il server smtp richiede l'autenticazione per l'invio
    sendemail -o message-content-type=html -o message-file=$logfile1 -u "Files marcati per l'eliminazione" -f $mittente -t $destinatario -s $server #-xu $smtpuser -xp $smtppwd -o tls=auto
    rm -f $logfile $logfile1
fi

exit 0

I campi da personalizzare/configurare all’interno dello script sono i seguenti:

  • DirScan: la directory target
  • destinatario: il proprio indirizzo email
  • server: il server smtp da utilizzare per inviare la notifica
  • smtpuser ed smtppwd: il nome utente e la password del proprio indirizzo email [Opzionale; necessario solo se il proprio server SMTP richiede l’autenticazione per l’invio della mail]
  • Decommentare la seconda parte del comando sendemail [Opzionale: necessario solo se il proprio server SMTP richiede l’autenticazione per l’invio della mail]

Crontab

Per automatizzare l’esecuzione dello script è possibile inserirlo nel proprio crontab. Eseguite, da terminale, il seguente comando:

crontab -e

Verrà aparto il vostro editor testuale predefinito; aggiungete la seguente riga

10 10 * * * /path/path/purgedirectory.sh

modificando, naturalmente /path/path con l’effettivo path dove avete salvato lo script.
In questo modo lo script girerà tutte le mattine alle 10:10.

Cambiare il motore di ricerca predefinito in Firefox

Firefox permette di cambiare il motore di ricerca da usare nella Search Bar con quello di nostra preferenza.

Ma cosa succede se, invece che nella search bar, immettiamo il testo da ricercare direttamente nella barra degli indirizzi?

Come comportamento predefinito Firefox ci mostra i risultati ottenuti da una ricerca fatta su Google.

È possibile modificare questo comportamento predefinito, modificando una voce di configurazione.

Puntare il browser all’indirizzo “about:config” e cercare la voce keyword.url.

Un doppio click sulla voce permette di modificare la stringa per la ricerca; per cercare con il motore di Yahoo, ad esempio, occorre mettere la stringa:

http://it.search.yahoo.com/search?fr=404&fr2=sfp&p=

Per cercare con DuckDuckGo, invece, la stringa dev’essere modificata in questo modo:

http://duckduckgo.com/?q=

Per tornare al motore predefinito (Google) è sufficiente un click col tasto destro del mouse sulla voce keyword.url, e cliccare sulla voce “Ripristina”.

Youtube Html5 Forever

Oggi segnalo questo interessante e utile script per greasemonkey studiato per youtube, che imposta come default per i video html5 anziché il famigerato flash.
Lo script, dal nome evocativo (Youtube Html5 Forever) è installabile da questo indirizzo http://userscripts.org/scripts/show/94609.
Una volta installato, visitando le pagine di youtube sarà possibile notare che i video non vengono visualizzati sfruttando il plugin di adobe, ma utilizzando i formati html supportati dal proprio browser (su firefox per Linux, WebM e Theora).
Per chi non conoscesse Greasemonkey, infine, rimando l’approfondimento alla pagina di wikipedia italia (http://it.wikipedia.org/wiki/Greasemonkey).

Alla prossima!