Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 May 2023 05:06:25 +0100
From:      Kaya Saman <kayasaman@optiplex-networks.com>
To:        Paul Procacci <pprocacci@gmail.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Tool to compare directories and delete duplicate files from one directory
Message-ID:  <b4ac4aea-a051-fbfe-f860-cd7836e5a1bb@optiplex-networks.com>
In-Reply-To: <CAFbbPujbyPHm2GO%2BFnR0G8rnsmpA3AxY2NzYOAAXetApiF8HVg@mail.gmail.com>
References:  <9887a438-95e7-87cc-a162-4ad7a70d744f@optiplex-networks.com> <CAFbbPugfhXGPfscKpx6B0ue=DcF_qssL6P-0GgB1CWKtm3U=tQ@mail.gmail.com> <344b29c6-3d69-543d-678d-c2433dbf7152@optiplex-networks.com> <CAFbbPuiNqYLLg8wcg8S_3=y46osb06%2BduHqY9f0n=OuRgGVY=w@mail.gmail.com> <ef0328b0-caab-b6a2-5b33-1ab069a07f80@optiplex-networks.com> <CAFbbPujUALOS%2BsUxsp=54vxVAHe_jkvi3d-CksK78c7rxAVoNg@mail.gmail.com> <7747f587-f33e-f39c-ac97-fe4fe19e0b76@optiplex-networks.com> <CAFbbPuhoMOM=wp26yZ42e9xnRP%2BtJ6B30y8%2BBa3eCBh2v66Grw@mail.gmail.com> <fd9aa7d3-f6a7-2274-f970-d4421d187855@optiplex-networks.com> <CAFbbPujpPPrm-axMC9S5OnOiYn2oPuQbkRjnQY4tp=5L7TiVSg@mail.gmail.com> <eda13374-48c1-1749-3a73-530370934eff@optiplex-networks.com> <CAFbbPujbyPHm2GO%2BFnR0G8rnsmpA3AxY2NzYOAAXetApiF8HVg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help


On 5/5/23 04:36, Paul Procacci wrote:
> #!/usr/bin/env perl
>
> use strict;
> use warnings;
>
> sub msgDie
> {
>   my ($ret) = shift;
>   my ($msg) = shift // "$0 dir_base dir\n";
>   print $msg;
>   exit($ret);
> }
>
> msgDie(1) unless(scalar @ARGV eq 2);
>
> my $base = $ARGV[0];
> my $dir  = $ARGV[1];
>
> msgDie(1, "base directory doesn't exist\n") unless -d $base;
> msgDie(1, "source directory doesn't exist\n") unless -d $dir;
>
> opendir(my $dh, $dir) or msgDie("Unable to open directory: $dir\n");
> while(readdir $dh)
> {
>   next if($_ eq '.' || $_ eq '..');
>   next if(! -f "$base/$_");
>
>   my ($ref) = (stat("$base/$_"))[7];
>   my ($src) = (stat("$dir/$_"))[7];
>   unlink("$dir/$_") if($ref == $src);
> }


To start with this is the directory structure:


  ls -lhR /tmp/test1
total 1
drwxr-xr-x  2 root  wheel     3B May  5 04:57 dupdir1
drwxr-xr-x  2 root  wheel     3B May  5 04:57 dupdir2

/tmp/test1/dupdir1:
total 1
-rw-r--r--  1 root  wheel     8B Apr 30 03:17 dup

/tmp/test1/dupdir2:
total 1
-rw-r--r--  1 root  wheel     7B May  5 03:23 dup1


ls -lhR /tmp/test2
total 1
drwxr-xr-x  2 root  wheel     3B May  5 04:56 dupdir1
drwxr-xr-x  2 root  wheel     3B May  5 04:56 dupdir2

/tmp/test2/dupdir1:
total 1
-rw-r--r--  1 root  wheel     4B Apr 30 02:53 dup

/tmp/test2/dupdir2:
total 1
-rw-r--r--  1 root  wheel     7B Apr 30 02:47 dup1


So what I want to happen is the script to recurse from the top level 
directories test1 and test2 then expected behavior should be to remove 
file dup1 as dup is different between directories.


I ran the script and again it didn't produce any output?

./test.pl /tmp/test1 /tmp/test2


I'm not sure if I need any other perl module? It is installed:

p5-ExtUtils-Config-0.008_1     Wrapper for perl configuration
perl5-5.32.1_3                 Practical Extraction and Report Language


I have many p5- modules too installed but maybe I don't have the right 
ones to run the script?





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b4ac4aea-a051-fbfe-f860-cd7836e5a1bb>