4 ###APPDATE: Sat May 29 19:18:48 2010
6 ###APPDESC: run commands against every matched filename
7 ###APPUSAGE: [-f|-d] [wildcard] [cmds|cmds "{}" args...]
8 ###APPEXAMPLE: foreach -d '*' echo mv '"{}"' ..
9 ###APPOPTION: -f:Select files only|-d:select directories only
12 #ENV variable MUST be defined somewhere,
13 #FOR perl to search modules from,
15 use lib
$ENV{XR_PERL_MODULE_DIR
};
17 use MyPlace
::Script
::Usage qw
/help_required help_even_empty/;
18 exit 0 if(help_required
($0,@ARGV));
19 #exit 0 if(help_even_empty($0,@ARGV));
22 print STDERR
" ",join(@_),"\n";
23 return system(@_) == 0;
26 my $cmd_place_holder_str = '"{}"';
27 my $cmd_place_holder_exp = qr/\{\}/;
35 if($opt_status eq 'cmd') {
49 @cmds = ('echo','"{}"') unless(@cmds);
50 $exp = "*" unless($exp);
52 my $cmds_replacable = 0;
54 if($_ =~ $cmd_place_holder_exp) {
60 use File
::Glob qw
/bsd_glob/;
62 foreach my $filename (bsd_glob
($exp)) {
63 if($opt and $opt eq '-d') {
64 next unless(-d
$filename);
66 elsif($opt and $opt eq '-f') {
67 next unless(! -d
$filename);
70 if($cmds_replacable) {
72 foreach my $word (@cmds_new) {
73 $word =~ s/$cmd_place_holder_exp/$filename/g;
78 &run
(@cmds,$filename);