use strict;
use warnings;
use File::Find;
use Digest::MD5;
use Data::Dumper ;
my @dup = fnd_dup(@ARGV) ;
#print Dumper ([@dup]);
foreach my $cur_cup (@dup) {
foreach my $cur_fil (@$cur_cup) {
print "my duplicate file is $cur_fil\n";
}
}
sub fnd_dup (@){
my (@dir_list) = @_;
if ( $#dir_list < 0 ) {
return (undef) ;
}
my %file ;
find( sub { -f && push @{$file{(stat($_))[7]}}, $File::Find::name }, @dir_list );
#print Dumper ([\%file]);
#'2040' => [
# '/opt/dkim-milter-2.8.3/obj.Linux.2.6.18-92.el5.x86_64/libsm/fpurge.o',
# '/opt/dkim-milter-2.8.3/obj.Linux.2.6.18-128.el5.x86_64/libsm/fpurge.o'
# ]
my (@resulth);
my %md ;
foreach my $size ( keys %file ) {
if ( $#{$file{$size}} < 1 ) {
next ;
}
foreach my $curr_file ( @{$file{$size}}) {
open (FILE, $curr_file ) or next ;
binmode(FILE) ;
push @{$md{Digest::MD5->new->addfile(*FILE)->hexdigest}}, $curr_file ;
close(FILE);
}
foreach my $hash (keys %md ) {
if ($#{$md{$hash}} >= 1 ) {
push (@resulth, [@{$md{$hash}}]);
}
}
}
return (@resulth)
perl script to check duplicate files
Basic Shell scripting
shell scripting
1. How do you find out what's your shell? - echo $SHELL- What's the command to find out today's date? - date
- What's the command to find out users on the system? - who
- How do you find out the current directory you're in? - pwd
- How do you remove a file? - rm
- How do you remove a - rm -rf
- How do you find out your own username? - whoami
- How do you send a mail message to somebody? - mail somebody@techinterviews.com -s 'Your subject' -c 'cc@techinterviews.com'
- How do you count words, lines and characters in a file? - wc
- How do you search for a string inside a given file? - grep string filename
- How do you search for a string inside a directory? - grep string *
- How do you search for a string in a directory with the subdirectories recursed? - grep -r string *
- What are PIDs? - They are process IDs given to processes. A PID can vary from 0 to 65535.
- How do you list currently running process? - ps
- How do you stop a process? - kill pid
- How do you find out about all running processes? - ps -ag
- How do you stop all the processes, except the shell window? - kill 0
- How do you fire a process in the background? - ./process-name &
- How do you refer to the arguments passed to a shell script? - $1, $2 and so on. $0 is your script name.
- What's the conditional statement in shell scripting? - if {condition} then … fi
- How do you do number comparison in shell scripts? - -eq, -ne, -lt, -le, -gt, -ge
- How do you test for file properties in shell scripts? - -s filename tells you if the file is not empty, -f filename tells you whether the argument is a file, and not a directory, -d filename tests if the argument is a directory, and not a file, -w filename tests for writeability, -r filename tests for readability, -x filename tests for executability
- How do you do Boolean logic operators in shell scripting? - ! tests for logical not, -a tests for logical and, and -o tests for logical or.
- How do you find out the number of arguments passed to the shell script? - $#
- What's a way to do multilevel if-else's in shell scripting? - if {condition} then {statement} elif {condition} {statement} fi
- How do you write a for loop in shell? - for {variable name} in {list} do {statement} done
- How do you write a while loop in shell? - while {condition} do {statement} done
- How does a case statement look in shell scripts? - case {variable} in {possible-value-1}) {statement};; {possible-value-2}) {statement};; esac
- How do you read keyboard input in shell scripts? - read {variable-name}
- How do you define a function in a shell script? - function-name() { #some code here return }
- How does getopts command work? - The parameters to your script can be passed as -n 15 -x 20. Inside the script, you can iterate through the getopts array as while getopts n:x option, and the variable $option contains the value of the entered option.
clean up script -- difference between two files
#!/usr/bin/perl
my $totalfile = $ARGV[0];
my $suspectfile = $ARGV[1];
my $outfile = $ARGV[2];
if ($#ARGV != 2) {
print "user script.pl realfile suspectfiel goodfile\n" ;
exit;
}
local $/;
open (SUS,"<" ,$suspectfile) or die " cannot open file " ;
my @allsus = split /\n/, <SUS>;
close( SUS) ;
open (TOT,"<" ,$totalfile) or die " cannot open file " ;
my @total = split /\n/, <TOT>;
close (TOT) ;
my %allsus = map {$_ => 1 } @allsus;
my @allgood = grep {!defined $allsus{$_ } } @total ;
my @new = join "\n", @allgood;
open (OUT,">",$outfile ) or die " cannot open file ";
print OUT "@new";
close (OUT);
my $totalfile = $ARGV[0];
my $suspectfile = $ARGV[1];
my $outfile = $ARGV[2];
if ($#ARGV != 2) {
print "user script.pl realfile suspectfiel goodfile\n" ;
exit;
}
local $/;
open (SUS,"<" ,$suspectfile) or die " cannot open file " ;
my @allsus = split /\n/, <SUS>;
close( SUS) ;
open (TOT,"<" ,$totalfile) or die " cannot open file " ;
my @total = split /\n/, <TOT>;
close (TOT) ;
my %allsus = map {$_ => 1 } @allsus;
my @allgood = grep {!defined $allsus{$_ } } @total ;
my @new = join "\n", @allgood;
open (OUT,">",$outfile ) or die " cannot open file ";
print OUT "@new";
close (OUT);
Perl file to find duplicate files
#!/usr/bin/perl
use strict ;
use warnings;
use File::Find;
use Data::Dumper;
use Digest::MD5;
my $pth = $ARGV[0];
unless ($pth) {
print " perl1 path";
exit ;
}
$\ = $/;
my %size ;
my %unopenfile ;
my %md5;
my @resuts;
my $m5 = Digest::MD5->new;
find( sub {
return if $_ eq '.' ;
return if $_ eq '..';
$size {$File::Find::name} = -s if -f ;
}, $pth ) ;
foreach my $file ( keys %size ){
next if $size{$file} < 1 ;
unless (open (f1, "$file") ) {
$unopenfile{$file}++;
next ;
}
push @{$md5{$m5->addfile(*f1)->hexdigest}}, $file;
close (f1);
}
foreach my $files ( keys %md5){
if ($#{$md5{$files}} >= 1){
push (@resuts, @{$md5{$files}});
}
}
foreach my $dup (@resuts) {
print "the duplicate files are $dup"
use strict ;
use warnings;
use File::Find;
use Data::Dumper;
use Digest::MD5;
my $pth = $ARGV[0];
unless ($pth) {
print " perl1 path";
exit ;
}
$\ = $/;
my %size ;
my %unopenfile ;
my %md5;
my @resuts;
my $m5 = Digest::MD5->new;
find( sub {
return if $_ eq '.' ;
return if $_ eq '..';
$size {$File::Find::name} = -s if -f ;
}, $pth ) ;
foreach my $file ( keys %size ){
next if $size{$file} < 1 ;
unless (open (f1, "$file") ) {
$unopenfile{$file}++;
next ;
}
push @{$md5{$m5->addfile(*f1)->hexdigest}}, $file;
close (f1);
}
foreach my $files ( keys %md5){
if ($#{$md5{$files}} >= 1){
push (@resuts, @{$md5{$files}});
}
}
foreach my $dup (@resuts) {
print "the duplicate files are $dup"
Subscribe to:
Posts (Atom)