@TCM: Das nuetzt noch immer nichts, wenn \n im Dateinamen ist.
Hier mal ein kurzes Perl-Stueck, welches im Prinzip fast fertig ist, man muss nur noch die Funktion schreiben, welche einem den relativen Pfad zur Link-Quelle zurueckgibt.
Hier mal ein kurzes Perl-Stueck, welches im Prinzip fast fertig ist, man muss nur noch die Funktion schreiben, welche einem den relativen Pfad zur Link-Quelle zurueckgibt.
Code:
#!/usr/bin/perl -w
use File::Find;
my %md5;
$ARGV[0] = '.' if (!@ARGV);
finddepth({wanted => \&action, no_chdir => 1}, @ARGV);
sub action {
return unless -f;
return if -l;
chomp ($hash = `/sbin/md5 -q $_`); #FIXME errorcheck
if (defined($md5{$hash})) {
$path = &relpath($md5{$hash}, $_);
exec("/bin/echo","/bin/ln","-sf","$path","$_") == 0 or
die "Can't link $_ to $md5{$hash}: $?";
} else {
$md5{$hash} = $_;
}
}
# TODO Return shortest possible relative path from second
# to first argument
sub relpath {
return $_[0];
}