Thread Doppelte Dateien löschen: Löschen mit Fehlertoleranz (29 answers)
Opened by Netspider at 2004-05-07 19:35

Netspider
 2004-05-07 19:35
#82080 #82080
User since
2003-09-25
49 Artikel
BenutzerIn
[Homepage] [default_avatar]
hi,

ich bin gerade mit meinem latein -perl- am ende.
ich habe einen ordner mit vieeelen liedern und möchte doppelte lieder löschen.
ich habe mir ein programm geschrieben, dass lieder löscht, die _\d.mp3 am ende haben, das ist die standardart, wie doppelte lieder benannt sind.
aber nun sind auch viele lieder dabei, die leichte namensunterschiede haben und deswegen nicht als gleich erkannt werden, zum beispiel mit rechtschreibfehlern und sonderzeichen ( ' )...

ich hab mir deswegen ein prog geschrieben, welches diese doppelten lieder findet, das problem ist nur, dass ich diese nicht löschen kann, da ich den dateinamen dann nicht mehr habe!

ich möchte lieder nicht einfach löschen, sondern nur das größte behalten.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ordner="Songs";

opendir(d,"$ordner") or do { print "$!"; exit; };
@files=grep {/\.mp3$/} readdir d or do { print "$!"; exit; };
closedir(d);

$found=0;
foreach $file (@files)
{
next if $file =~ m/unknown/i;
next if $file =~ m/untitled/i;

$orifile = $file; # backup
$file =~ s/(_\d+)?\.mp3$//ig; # doppeltes ende weg
$file =~ s/feat.*?-//ig; # "featuring..." entfernen
$file =~ s/presents.*?-//ig; # "presents..." entfernen
$file =~ s/and.*?-//ig; # "and..." entfernen
$file =~ s/\bthe\b//ig; # "the" entfernen
$file =~ s/(th|ht)/t/ig; # schreibfehler th/ht -> t
$file = lc($file); # kleinschreiben
$file =~ s/[^a-z]//ig; # alle sonderzeichen weg
$total{$file}++; # zum hash addieren

}
foreach (sort keys %total)
{
if($total{$_}>1)
{
print $total{$_}."\t: ".$_."\n";
$found+=$total{$_}-1;
}
}
print "Finished\n";
print "Found $found double files";
<>;


da ist jetzt nichts mit strict und my, aber ich denk ihr verstehts trotzdem ;-)
mit
Code: (dl )
stat($file)[7]
bekomm ich die dateigröße, aber wie komm ich wieder an $file ran?
kann mir jemand einen weg sagen, diese lieder zu löschen, wenn sie kleiner als ihre doppelgänger sind?
perl -e "s;;Ronny Lindner;;m;(..).$;;$l=$1;s;n;;g;m;.{4}$;;$_=$l;$I=$&;m;^(.);;$_.='ts';$_.=$1;$_++;$_++;$_.=$I;print ucfirst;"

View full thread Doppelte Dateien löschen: Löschen mit Fehlertoleranz