#!/usr/bin/perl # # 2つのディレクトリパスを渡して、サブディレクトリ名を取得後、比較。 # 同じディレクトリ名が存在したらリストアップする。 # # あふで移動する際、 # 同じディレクトリ名があっても中身を移動してしまうので、 # 事前にチェックするために作成。 # # usage : perl $0 dir1 dir2 use strict; use File::Basename; my $debugfg = 0; # 0 = debug off / 1 = debug on if ( $#ARGV != (2-1) ) { print "ERROR : 引数の数が違います。"; &usage; } my @dirname = @ARGV; foreach my $p (@dirname) { unless ( -d $p ) { print "ERROR : $p はディレクトリではありません。"; &usage; } } my $cnt = 0; foreach my $d (@dirname) { print "対象ディレクトリ ", ($cnt==0? "A" : "B"), " : $d\n"; $cnt++; } my @files_a = (); my @files_b = (); $cnt = 0; foreach my $d (@dirname) { opendir DH, $d || &error("$d が開けません。"); while (my $file = readdir DH) { next if $file =~ /^\.{1,2}$/; if ( $cnt == 0 ) { push(@files_a,$file) if -d "$d\\$file"; } else { push(@files_b,$file) if -d "$d\\$file"; } } closedir DH; $cnt++; } if ( $debugfg ) { print '-' x 20,"\n"; foreach my $n (@files_a) { print $n,"\n"; } print '-' x 20,"\n"; foreach my $n (@files_b) { print $n,"\n"; } } print '-' x 20,"\n"; $cnt = 0; foreach my $d (@dirname) { print "$d ... ",($cnt ==0? $#files_a+1 : $#files_b+1),"\n"; $cnt++; } my @redup_name = (); foreach my $a (@files_a) { $a =~ tr/[A-Z]/[a-z]/; foreach my $b (@files_b) { $b =~ tr/[A-Z]/[a-z]/; push(@redup_name,$a) if $a eq $b; } } print '-' x 20,"\n\n"; if ( $#redup_name < 0 ) { print "重複してるディレクトリ名は見つかりませんでした。\n"; } else { print "重複ディレクトリ名 :\n"; print '-' x 10,"\n"; foreach my $s (sort {$a cmp $b} @redup_name) { print $s,"\n"; } } &pushanykey; exit(0); # ---------- subroutine sub usage { print "\n\n"; print "usage : perl ", basename($0), " dir1 dir2\n\n"; print " 2つのディレクトリパスを渡して、サブディレクトリ名を取得後、比較。\n"; print " 同じディレクトリ名が存在したらリストアップする。\n\n"; print " あふで移動する際、同じディレクトリ名があっても中身を移動してしまうので、\n"; print " 事前にチェックするために作成。\n"; &pushanykey; exit(0); } sub pushanykey { print "\n\n>>> push any key "; my $c = getc; } sub error { my $msg = $_; print "\nERROR : $msg\n"; &pushanykey; exit(0); }