mercoledì 31 ottobre 2012

Archlinux: uno script (in perl) per trovare i file che non appartengono a nessun pacchetto installato

In alternativa ad un comando del tipo:

$ find /usr/bin/ -execdir pacman -Qo {} \;

ho realizzato un script perl che svolge la medesima funzione (ossia analizzare il filesystem alla ricerca dei file non appartenenti a nessun pacchetto installato) con il vantaggio però di essere molto più performante rispetto all'invocazione continua di "pacman -Qo"
Ho chiamato il mio script leftover (in inglese "rimasuglio", "avanzo")
#!/usr/bin/perl
# leftover.pl
use warnings;
use strict;
use File::Find;
use File::Slurp;
use File::Spec;
use feature 'say';
my $dir=$ARGV[0];
die ":: Uso: $0 <directory>\n" unless (scalar @ARGV == 1);
die qq{:: Directory non valida: "$dir"\n} unless -d $dir;
die qq{:: "$dir" non è un percorso assoluto\n"} unless File::Spec->file_name_is_absolute($dir);
my @files;
my @db = qx(pacman -Ql);
say ":: Ricerca in corso dei file non appartenenti a nessun pacchetto ...";
find({ wanted => \&process, follow_skip => 2 }, $dir);
if (@files)
{
    write_file('/tmp/leftover.txt', @files);
    say q{:: Risultati della ricerca salvati in "/tmp/leftover.txt"};
}
else
{
    say ':: Nessun file trovato';
}

sub process{
    return if -d "$File::Find::name";
    my $check;
    my $f = quotemeta($File::Find::name);
    for (@db)
    {
        if ($_ =~ /^\S+\s$f/)
            {
                $check = 1;
                last;
            }
    }
    if (! $check)
    {
        say ">$File::Find::name";
        push @files, "$File::Find::name\n";
    }
}

L'utilizzo è molto semplice, basta dare:

$ leftover.pl <path da analizzare>

Ovviamente avrebbe poco senso passare come path /home o /tmp  oppure directory speciali come /proc o /sys all'interno delle quali nessun pacchetto va a collocare file.
Tenete anche in considerazione che analizzare path contenenti molti file e molti livelli di sottodirectory (come ad esempio /usr) potrebbe richiedere parecchio tempo!
Unica dipendenza richiesta per poter eseguire lo script è perl-file-slurp.
I risultati della ricerca verranno salvati nel file /tmp/leftover.txt per un'agevole consultazione.

Nessun commento:

Posta un commento