Hallo, Am Wed, 24 Nov 2004, Ekkard Gerlach schrieb:
Hat hier jmd schon eine Lösung aus einem tar/ tgz-Archiv die neusten 50-Dateien anzeigen zu lassen? - Es geht um die Prüfung einer Datensicherung: "Sind auch die neusten, neuen Dateien von heute 'drauf?"
Mit tar zflv archiv.tgz erhält man z.B. diese Ausagabe:
Du kennst die Nachteile von tar.gz?
Jetzt müßte *nur* noch der Aktualität nach sortiert werden >0
$ tar tvzf archiv.tgz | perl -MTime::ParseDate -ne ' { local @_ = split(/\s+/); print parsedate("$_[3] $_[4]"), " $_"; }' | sort -n | tail -n 50 oder ganz in perl und nen Tick schneller (aber tar+gzip bremst wohl eh mehr) $ tar tvzf archiv.tgz | perl -MTime::ParseDate -ne ' { @_=split(/\s+/); push(@files, [ (parsedate("$_[3] $_[4]"))[0], $_ ]); } END { print map { $_->[1] } sort { $a->[0] <=> $b->[0] } @files; }' | tail -n 50 oder als script: ==== tar_tv_out_datesort.pl ==== #!/usr/bin/perl -w use strict; use Time::ParseDate; my @files; while(<>) { local @_ = split(/\s+/); push(@files, [ (parsedate("$_[3] $_[4]"))[0], $_ ]); } print map { $_->[1] } sort { $a->[0] <=> $b->[0] } @files; ==== $ tar tzvf archive.tgz | tar_tv_out_datesort.pl | tail -n 50 Oder gleich so: ==== tar_tv_datesort.pl === #!/usr/bin/perl -w use strict; use POSIX qw(strftime); use Stat::lsMode qw(format_mode); use Archive::Tar; my @tarfields = qw( name size mtime mode uid gid linkname uname gname devmajor devminor prefix); foreach(@ARGV) { open(TAR, "<$_") or die "cannot open '$_': $!"; binmode(TAR); my $tar = new Archive::Tar(*TAR) or die $!; close(TAR) or die $!; foreach( sort { $a->{mtime} <=> $b->{mtime} } $tar->list_files(@tarfields) ) { printf("%s %s/%s %10i %s %s\n", scalar format_mode($_->{mode}), $_->{uname}, $_->{gname}, $_->{size}, strftime("%Y-%m-%d %H:%M", localtime($_->{mtime})), $_->{name} ); } } ==== $ tar_tv_datesort.pl archive.tgz | tail -n 50 Fuer das letzte script muss du evtl. Stat:lsMode nachinstallieren[1], dafuer laesst sich die Ausgabe leichter anpassen. Z.B. koennte man die auszugebenden Felder anpassen, die Zeitangabe praezisieren usw. Auch das "tail" koennte man noch einbauen, in dem man vom Ergebnis des sort per slice nur die letzten 50 Elemente ausgeben laesst. Da sollte man dann aber die Anzahl dann per Option definieren koennen, wozu man das script doch noch ein bisserl mehr erweitern muesste. HTH, -dnh [1] z.B. mittels 'cpan -i Stat::lsMode' als root, evtl. hat SUSE aber auch ein 'perl-stat-lsmode' o.ae. RPM dabei. 'pin Stat/lsMode.pm' sollte helfen. -- 108: Doppelte Staatsbürgerschaft Was nützt der zweite Ausweis, wenn doch eh der gleiche Name drin steht? (E. Herbst nach Harald Schmidt)