atat-mirror/glue/jobctrl/foreachfile

67 lines
1.4 KiB
Tcsh
Executable File

#!/bin/csh
if ( $#argv == 0 || x"$1" == "x-h" ) then
cat - <<EOF
Syntax: foreachfile [-e] [-n filename_to_skip] [-a and_filename] [-d depth] filename command
Execute the specified command in every first-level subdirectory containing the file filename.
The -e option cause foreachfile to skip directories containing the file "error".
The -n option cause foreachfile to skip directories containing the file filename_to_skip.
The -a option specifies that the file and_filename must also exist.
The -d option specifies to go down to lower level subdirectories as well (the default is 1).
EOF
exit
endif
set depth=1
while ( $#argv != 0 )
switch ($1)
case "-e":
set skiperror
breaksw
case "-n":
set toskip=$2
shift
breaksw
case "-a":
set toadd=$2
shift
breaksw
case "-d":
set depth=$2
shift
breaksw
default:
break
breaksw
endsw
shift
end
@ depth = $depth + 1
foreach dirfile ( `find -mindepth 2 -maxdepth $depth -name $1` )
set dir=`echo $dirfile | sed "s+/$1++g"`
pushd $dir >& /dev/null
set doit=1
if ( $?skiperror ) then
if ( -e error ) then
set doit=0
endif
endif
if ( $?toskip ) then
if ( -e $toskip ) then
set doit=0;
endif
endif
if ( $?toadd ) then
if ( ! -e $toadd ) then
set doit=0;
endif
endif
if ( $doit ) then
csh -f -c "$argv[2-]"
endif
popd >& /dev/null
end