#!/bin/sh -ef dump() { find "$@" -type f -name '*.rpm' -print0 |perl -Mstrict -ln0 -e \ ' use RPM::Header; my $f = $_; my $rpm = RPM::Header->new($f) or die "$f: $RPM::err\n"; while (my ($k, $v) = each %$rpm) { next if $k =~ /CHANGELOGTEXT|SIGGPG|SIGMD5|GIF/; my @v = ref($v) ? @$v : $v; my @lines = map { split /[\r\n]+/ } @v; foreach (@lines) { next if /^\s*#/; next unless /\%[a-zA-Z_][a-zA-Z0-9_]+/; use File::Basename; printf "%s\t%s\t%s\n", basename($f), $k, $&; } } ' } dump "${1-/raid/ALT/Sisyphus/files}"