#!/usr/bin/perl_parallel -w # For Emacs: -*- mode:cperl; mode:folding; -*- # {{{ use block use strict; use File::Spec; # }}} my $wd = shift @ARGV; $wd = '.' if(!defined $wd); $wd = File::Spec->rel2abs($wd); my %size = map { $_ => -s $_ } @{&files($wd)}; my @fnames = sort { $size{$b} <=> $size{$a} || $a cmp $b } keys %size; # # The only speedup potential I see, is to replace the cmp system call +with # something faster ??? # And to get rid of the File::Spec->abs2rel with some leaner/faster co +de # while(@fnames) { my $f = shift @fnames; next if(-l $f); for my $f2 (@fnames) { next if(-l $f2); last if($size{$f} != $size{$f2}); if(system("cmp -s '$f' '$f2'") == 0) { # $f is the file to be LINKED TO, so we need this as relative pa +th # $f2 is the file to be evtl. LINKED FROM, this can/should be ab +solute $f2 =~ m|^ ( (?: .* / (?: \.\.?\Z(?!\n) )? )? ) ([^/]*) |xs; my $new = File::Spec->abs2rel($f,$1); `ln -sf '$new' '$f2'`; } } } # {{{ files # sub files { my $path = shift; my $f; my @files = (); opendir(DIR, $path); # open directory for $f (readdir(DIR)) { next if($f =~ /^\.|\..$/); # skip . and .. if(-f "$path/$f") { push @files, "$path/$f"; } elsif(-d "$path/$f") { push @files, @{&files("$path/$f")}; } } closedir DIR; # close directory return \@files; } # }}}

In reply to Identical Files to Symbolic Links by PetaMem

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.