1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/perl -w
- # vi: set ts=4:
- @LINKS=`find . -type l|xargs ls -l`;
- #print @LINKS;
- while($_ = shift @LINKS){
- chomp;
- my ($perm,$nlinks,$owner,$group,$size,$month,$day,$year,$file) =
- split(' ', $_, 9);
- my $link;
- if($perm =~ m/^l/){
- ($relfile, $link) = split(' -> ', $file);
- }
- # chop off leading . in $file
- $file = $relfile;
- $file =~ s/^\.//;
- if($perm =~ m/^l/){
- my @pathcomponents = split('/', $file);
- my @linkcomponents = split('/', $link);
- if($link =~ m/^\//){
- @newcomponents = @linkcomponents;
- }else{
- @newcomponents = @pathcomponents;
- # chop off filename
- pop(@newcomponents);
- while($comp = shift @linkcomponents){
- #print "path: ",join(':',@newcomponents)," -- $comp -- ", join(':',@linkcomponents),"\n";
- if($comp eq ""){
- # ignore
- }elsif($comp eq ".."){
- pop(@newcomponents);
- }else{
- push @newcomponents,$comp;
- }
- }
- }
- if($newcomponents[0] eq ""){
- shift(@newcomponents);
- }
- if($pathcomponents[0] eq ""){
- shift(@pathcomponents);
- }
- #print "from ",join('/',@pathcomponents),"\n";
- #print "to ",join('/',@newcomponents),"\n";
- if($newcomponents[0] eq $pathcomponents[0]){
- #print $newcomponents[0],", ",$pathcomponents[0];
- #print "should be relative\n";
- while($newcomponents[0] eq $pathcomponents[0]){
- shift(@newcomponents);
- shift(@pathcomponents);
- }
- while(@pathcomponents > 1){
- shift(@pathcomponents);
- unshift(@newcomponents,"..");
- }
- }else{
- #print "should be absolute\n";
- unshift(@newcomponents,"");
- }
- $newlink=join('/',@newcomponents);
- print "ln -sf $newlink $relfile\n";
- unlink($relfile);
- symlink($newlink,$relfile);
- }
- }
|