#!/usr/bin/perl # This expects both the input and output directory to be organized this way: # rfp-NN/BUCKET/TYPE/ # Note that items from input will be moved to output if they are included in group # # output directory ends up with two subdirectories: native/ and numbered/ # native is where things are just moved over at the end # numbered is where the numbered items go use strict; use warnings; use autodie qw(:all); use Getopt::Long; use File::Spec::Functions; use File::Spec; use File::Path qw(make_path); my %GROUP_NAMES_BY_DIR = ( confidential => 'CONFIDENTIAL', privilege => 'PRIVILEGE', privileged => 'PRIVILEGE', 'journalist-privilege' => 'PRIVILEGE' ); sub UsageAndExit($) { print STDERR "usage: $0 --inputToplevelDir=/path/to/inputdir --outputToplevelDir=/path/to/outputdir --group=group [ --verbose=N ]\n"; print STDERR "\n $_[0]\n"; exit 2; } my($VERBOSE, $INPUT_TOPLEVEL_DIR, $OUTPUT_TOPLEVEL_DIR, $GROUP) = (0, undef, undef, undef, undef, undef); GetOptions("verbose=i" => \$VERBOSE, "inputToplevelDir=s", \$INPUT_TOPLEVEL_DIR, 'group=s' => \$GROUP, "outputToplevelDir=s", \$OUTPUT_TOPLEVEL_DIR) or UsageAndExit("invalid options"); { no warnings 'uninitialized'; UsageAndExit("\"$INPUT_TOPLEVEL_DIR\" is not a readable directory") unless defined $INPUT_TOPLEVEL_DIR and -r $INPUT_TOPLEVEL_DIR and -d $INPUT_TOPLEVEL_DIR; UsageAndExit("\"$OUTPUT_TOPLEVEL_DIR\" is not a readable directory") unless defined $OUTPUT_TOPLEVEL_DIR and -r $OUTPUT_TOPLEVEL_DIR and -d $OUTPUT_TOPLEVEL_DIR; UsageAndExit("\"$GROUP\" is not a valid group") unless defined $GROUP and defined $GROUP_NAMES_BY_DIR{$GROUP}; } my $upiNumberFile = File::Spec->rel2abs(catfile($OUTPUT_TOPLEVEL_DIR, "upi-number-start.txt")); UsageAndExit("\"$upiNumberFile\" is not a readable file") unless -r $upiNumberFile and -f $upiNumberFile; open(my $upiFH, '<', $upiNumberFile); my $count = 0; my $upiStart = -1; while (my $line = <$upiFH>) { $count++; chomp $line; UsageAndExit("\"$upiNumberFile\" must contain a number only!") unless $line =~ /^\s*(\d+)\s*$/; $upiStart = $1; } close $upiFH; UsageAndExit("Error reading \"$upiNumberFile\"") unless $count == 1 and $upiStart > 0; my $upiCurrentNum = $upiStart; opendir(my $topDH, $INPUT_TOPLEVEL_DIR); while (my $rfp = readdir $topDH) { next unless $rfp =~ /^\s*rfp-(\d+)\s*$/; my $inRfpDirName = catfile($INPUT_TOPLEVEL_DIR, $rfp); opendir(my $rfpDH, $inRfpDirName); while (my $bucketName = readdir $rfpDH) { next unless $bucketName eq $GROUP; my $inBucketDirName = catfile($INPUT_TOPLEVEL_DIR, $rfp, $bucketName); print " $inBucketDirName\n"; } closedir $rfpDH; } closedir $topDH; #make_path(, { # verbose => 1, # mode => 0755, #}); ############################################################################### # # Local variables: # compile-command: "perl -c build-label-upi-number.plx" # End: