$ 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.