Hallo jwd,
ich möchte (in mehr oder minderer Regelmäßigkeit) die
Partitionen absuchen, ob der eine oder andere Dateiname von
ca. 150 bestimmten Dateien mehrfach zu finden ist. Es reicht
völlig, wenn im Ergebnis der Dateiname, der doppelt auftritt,
angezeigt wird (ohne Pfadangabe etc.).
Ich hab mal ein Perl-skript gebastelt, welches sowohl
unter Win als auch unter Unix dieses tut. Der Aufruf
unter Win wäre:
C:\> perl getdupe.pl c:\temp
das liefert rekursiv alle doppelten oder x-fachen
Dateien aus c:\temp… untereinander, hier noch mit
Pfadnamen.
Es sucht auch die ganze Platte durch und ist
so schnell wie Deine Platte Daten liefert.
Die Ausgabe (jetzt Dateiname /Verzeichnis)
kann man anpassen, in dem man in der Funktion
sub ZeigeDoppelteDateien herumschreibt.
Wo kriegt man Perl her, wenn man es nicht hat?
Unter Unix ist es bei den Distributionen dabei,
unter windows installiert man einfach Activeperl
(http://downloads.activestate.com/ActivePerl/Windows/…
aus http://www.activestate.com/Products/Download/Downloa…)
Der Praktische ist, man kann solche skripts auch
als zeitgesteuerte Batch, auf einem Webserver als
cgi-Programm usw. einsetzen.
Kennt jemand ein kleines Tool hierfür, weil ich vom
Programmieren nicht die Ahnung habe ?
Ich hänge es mal dran. Eine bitte an die Perl-Freaks:
ich lerne Perl gerade (wieder), komme von C - sieht man 
und freue mich über einige nette Tipps …
[------ 8#!/usr/bin/perl
use strict;
use Win32; # remove this line under unix OS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
main:
chdir $ARGV[0] if (defined $ARGV[0]);
Workproc();
exit(0);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub Workproc
{
my @table;
SucheDateien(@table);
SortiereDateinamen(@table);
ZeigeDoppelteDateien(@table);
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub SucheDateien # Achtung: rekursiv
{
my $rtable = shift;
my @dateien = LeseVerzeichnis();
chomp(my $path=pwd
) ; # use this w/Unix
chomp(my $path=Win32::GetCwd()); # use this w/Win32
print "Suche in: ", $path, „\n“;
foreach my $datei (@dateien) {
push(@$rtable, [$datei, $path]) if (-f $datei); # record [a,b]
if (-d $datei and $datei ne „.“ and $datei ne „…“) {
chdir $datei;
SucheDateien($rtable); # rekursiv suchen
chdir „…“;
}
}
}
- - - - – - - - - - - - - - - - - - - - - - - - - - - - -
sub SortiereDateinamen
{
my $rtable = shift;
my @arr = sort ({lc $a->[0] cmp lc $b->[0]} @$rtable) ;
@$rtable = @arr;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub ZeigeDoppelteDateien
{
my $rarray = shift;
my $count = @$rarray;
for (my $i=0; $i[0] eq lc $$rarray[$i+1]->[0]) {
print "mehrfach: ", $$rarray[$i]->[0], " -> ";
do { print „\t“, $$rarray[$i++]->[1], „\n“;
} while (lc $$rarray[$i-1]->[0] eq lc $$rarray[$i]->[0])
}
}
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub LeseVerzeichnis
{
opendir(MYDIR, „.“);
my @files = readdir(MYDIR);
closedir(MYDIR);
return @files;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Grüße
CMБ