Quoterd /s /q c:\transfer\Benutzer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
#!/usr/bin/perl use strict; use warnings; use 5.010; use Cwd; use File::Spec; use Getopt::Long; use File::Find::Rule; $| = 1; my $PROGNAME = ( split m|[\\/]|, $0 )[-1]; help() if !@ARGV; my ( @filemask, @dir ); my ( $verbose, $notest, $progressbar, $debug, $force, $help ); GetOptions( "f|file=s" => \@filemask, # filemasks to select several files (DEFAULT: all files) "d|dir=s" => \@dir, # dirs for scan (DEFAULT: current dir) "progress" => \$progressbar, # show progress (DEFAULT: on) "notest" => \$notest, # force to run in real mode (DEFAULT: off) "force" => \$force, # force confirm with Yes all actions (DEFAULT: off) "v|verbose" => \$verbose, # show information about current action (DEFAULT: off) "debug" => \$debug, # show debug info "h|help" => \$help # show help ) or die "Error in command line arguments\n"; ### set defaults of parameters if not already set push @dir, Cwd::cwd() if not @dir; # use current dir, if no parameter --dir defined $verbose //= 0; $notest //= 0; $force //= 0; $progressbar //= 1; $progressbar = 0 if $verbose; ### # my $testmode = not $notest; if ($debug) { say '--------------------'; say "Testmode: $testmode"; say "Force: $force"; say "Progressbar: $progressbar"; say "Verbose: $verbose"; say "Dirs: @dir"; say "Masks: @filemask"; say '--------------------'; exit 4711; } help() if $help; if (not @filemask) { say "!!!! ##ERROR## !!!! filemask must not be empty!\n"; help(); } say "Testmode #####################" if $testmode; #### search files my $rule = File::Find::Rule->new(); my $progress_count = 0; $rule->name(@filemask); # set filemasks for search $rule->exec( # this sub is called for each matched file of search sub { my ( $shortfn, $dir, $filename ) = @_; $filename = File::Spec->rel2abs($filename); $progress_count++; if ($progressbar) { print '.' if $progress_count % 100 == 0; # show progress all 100 files } elsif ( $verbose and $testmode ) { print '#TESTMODE# found '; say $filename; # print filename for testing, no changing of files } if ( not $testmode ) { # is no test, let the program run in real life my $char = 'Y'; if ( not $force ) { # interactive confirm $char = 'N'; print "Confirm action for $filename. Really? (y/N) "; $char = getc(); getc(); # fetch Enter after y or n } if ( uc $char eq 'Y' ) { # Y means let run action for this file action_for_file($filename); } } } ); $rule->in(@dir); #start search in dirs now exit; # ----------------------------------------------------------------------------- sub action_for_file { my $filename = shift; my $result; say "Processing $filename" if $verbose; $result = ######################################################################## ###### !!!!! DO THE VERY BAD ACTION FOR THE FILE HERE!!!!! ######################################################################## unlink($filename) # !!!!!!!! BEWARE !!!!!!!! ######################################################################## ######################################################################## ; return $result; } # ------------------------------------ sub help { print <<"HELP"; Usage: $PROGNAME --file=FILEMASK --dir=DIR1 Parameters: --dir Selected directory --file Filemask for selecting several files --progress Action with progressbar --verbose Show some information about current actions --force Force confirm for all actions with Yes --notest Force action for files into real mode (test mode is off!) --help This help --debug Some debugging information for program Example: $PROGNAME --file=a.[12]* -d=X:\\TEST --verbose Processes all files a.1* .. a.2* from dir X:\\TEST in testmode $PROGNAME --file=a.[12]* -d=/home/useer998/TEST --verbose Processes all files a.1* .. a.2* from dir /home/useer998/TEST in testmode $PROGNAME --file=a.[2]* -d=. --notest Processes all files a.2* from current dir in real mode (ACTIONS ARE PROCESSED!) with confirmation $PROGNAME --file=a.[2]* --notest --force Processes all files a.2* with no confirmation in real mode (ACTIONS ARE PROCESSED!) HELP exit 4711; } __END__
print '.' if ++$progress_count % 10; # show progress all 10 files
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
say "Testmode #####################" if $testmode;
#### search files
my $rule = File::Find::Rule->new();
my $progress_count = 0;
# count of files to have action
my $total_count = 0;
...
$progress_count++;
$total_count++;
...
print "\ntotal files: ".$total_count."\n";
$rule->in(@dir); #start search in dirs now
Quotedu kannst aber nicht schon bevor die lief, die Ausgabe der Anzahl machen
2014-10-27T10:29:43 jan99Ist es jetzt auch so wie du wolltest?Quotedu kannst aber nicht schon bevor die lief, die Ausgabe der Anzahl machen
... das klingt logisch !
2014-10-27T10:29:43 jan99Mann, ey! Das ist dann halt ein Exit-Code, der bedeutet: Mach dich erst mal frisch mit Java oder Kölsch bevor du das Programm über deine Daten herfallen lässt, denn du weißt nicht was du tust, sonst hättest du niemals help oder debug nutzen müssen! ;)Aber was bedeutet dann die 4711 - außer Köllsch Wasser !