Scripts in bin: improved script quality, option listing and

exit status on -help
This commit is contained in:
Chris Greenshields
2017-05-21 19:58:36 -04:00
parent 8fe9195c5f
commit a356adbfd8
12 changed files with 312 additions and 296 deletions

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -41,7 +41,7 @@
# by colons or whitespace # by colons or whitespace
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
cat <<USAGE 1>&2 cat <<USAGE
Usage: ${0##*/} [OPTION] path [wildcard1] .. [wildcardN] Usage: ${0##*/} [OPTION] path [wildcard1] .. [wildcardN]
options: options:
-strip remove inaccessible directories -strip remove inaccessible directories
@ -58,6 +58,10 @@ options:
2 initial value of 'path' is empty 2 initial value of 'path' is empty
USAGE USAGE
}
error () {
usage 1>&2
exit 1 exit 1
} }
@ -68,12 +72,15 @@ while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-strip) -strip)
strip=true strip=true
shift shift
;; ;;
-*)
error
;;
*) *)
break break
;; ;;
@ -81,7 +88,7 @@ do
done done
[ "$#" -ge 1 ] || usage [ "$#" -ge 1 ] || error
dirList="$1" dirList="$1"
shift shift

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -31,8 +31,6 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat <<USAGE cat <<USAGE
Usage: ${0##*/} [OPTION] Usage: ${0##*/} [OPTION]
@ -45,6 +43,12 @@ Remove the contents of the constant/polyMesh directory as per the
Foam::polyMesh::removeFiles() method. Foam::polyMesh::removeFiles() method.
USAGE USAGE
}
error () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
@ -55,21 +59,21 @@ while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-case) -case)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" cd "$2" 2>/dev/null || error "directory does not exist: '$2'"
caseDir=$2 caseDir=$2
shift 2 shift 2
;; ;;
-region) -region)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
regionName=$2 regionName=$2
shift 2 shift 2
;; ;;
*) *)
usage "unknown option/argument: '$*'" error "unknown option/argument: '$*'"
;; ;;
esac esac
done done
@ -133,7 +137,7 @@ for i in \
surfaceIndex \ surfaceIndex \
; ;
do do
rm -rf $meshDir/$i $meshDir/$i.gz rm -rf ${meshDir:?}/$i ${meshDir:?}/$i.gz
done done
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2015-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -33,38 +33,42 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE cat<<USAGE
Usage: ${0##*/} [OPTION] <sourceCase> <targetCase> Usage: ${0##*/} [OPTION] <source case> <target name>
options: options:
-l | -latestTime clone the latest time directory -latestTime clone the latest time directory
-h | -help print the usage -help print the usage
Create a new <targetCase> case directory that includes time, system and constant Create a new <targetCase> case directory that includes time, system and constant
directories of <sourceCase> directory. directories of <sourceCase> directory.
The time directory is the first time directory by default. The time directory is the first time directory by default.
USAGE USAGE
}
error () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
TIME_OPTION="head -1" time_option="head -1"
# parse options # parse options
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-l | -latestTime) -l | -latestTime)
TIME_OPTION="tail -1" time_option="tail -1"
shift 1 shift 1
;; ;;
-*) -*)
usage "unknown option: '$*'" error "unknown option: '$*'"
;; ;;
*) *)
break break
@ -72,19 +76,18 @@ do
esac esac
done done
[ $# -eq 2 ] || usage "Incorrect arguments specified" [ $# -eq 2 ] || error "Incorrect arguments specified"
if [ "$(foamListTimes -case $1 2>&1 >/dev/null | grep 'FOAM FATAL ERROR')" ] foamListTimes -case "$1" >/dev/null 2>&1 || \
then error "'$1' is not a valid case directory"
usage "$1 is not does not a valid case directory"
fi ! [ -e "$2" ] || error "'$2' file/directory already exists, delete and re-run"
! [ -e $2 ] || usage "$2 file/directory already exists, delete and re-run"
echo "Making $2 case directory" echo "Making $2 case directory"
mkdir $2 mkdir "$2"
TIME_DIR="$(foamListTimes -withZero -case $1 | $TIME_OPTION)" time_dir="$(foamListTimes -withZero -case "$1" | $time_option)"
echo "Copying case directories from $1 to $2" echo "Copying case directories from $1 to $2"
cp -r $1/system $1/constant $1/${TIME_DIR} $2 cp -r "$1"/system "$1"/constant "$1"/"${time_dir}" "$2"
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2015-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -32,19 +32,17 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage () { usage () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat <<USAGE cat <<USAGE
Usage: ${0##*/} [OPTIONS] ... Usage: ${0##*/} [OPTIONS] ...
options: options:
-d | -dir <dir> directory containing png images (default local dir) -dir | -d <dir> directory containing png images (default local dir)
-f | -fps <fps> frames per second (default = 10) -fps | -f <fps> frames per second (default = 10)
-h | -help help -help | -h help
-i | -image <name> name of image sequence (default = image) -image | -i <name> name of image sequence (default = image)
-o | -out <name> name of output video file (default = video) -out | -o <name> name of output video file (default = video)
-s | -start <frame> specify the start frame number for avconv -start | -s <frame> specify the start frame number for avconv
-w | -webm WebM output video file format -webm | -w WebM output video file format
Creates a video file from a sequence of PNG images Creates a video file from a sequence of PNG images
- A sequence named "image" will expect files image.0000.png, image.0001.png, etc - A sequence named "image" will expect files image.0000.png, image.0001.png, etc
@ -55,56 +53,55 @@ Creates a video file from a sequence of PNG images
Requires avconv or mencoder for MPEG-4 output, avconv for WebM output Requires avconv or mencoder for MPEG-4 output, avconv for WebM output
USAGE USAGE
}
error () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
# Default settings # Default settings
DIR='.' dir=.
IMAGE='image' image=image
VIDEO='video' video=video
FPS=10 fps=10
FMT='mp4' fmt=mp4
START_NUMBER=''
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-d | -directory) -d | -dir)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
DIR=$2 dir=$2
shift 2 shift 2
;; ;;
-f | -fps) -f | -fps)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
FPS=$2 fps=$2
shift 2 shift 2
;; ;;
-i | -image) -i | -image)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
IMAGE=$2 image=$2
shift 2 shift 2
;; ;;
-o | -out) -o | -out)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
VIDEO=$2 video=$2
shift 2
;;
-s | -start)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
START_NUMBER="-start_number $2"
shift 2 shift 2
;; ;;
-w | -webm) -w | -webm)
FMT=webm fmt=webm
echo "Selected $FMT format, requires avconv..." echo "Selected $fmt format, requires avconv..."
shift shift
;; ;;
-*) -*)
usage "invalid option '$1'" error "invalid option '$1'"
;; ;;
*) *)
break break
@ -116,37 +113,36 @@ done
# MAIN # MAIN
# #
[ -f "$(ls -1 $DIR/$IMAGE.*.png | head -1)" ] || usage "Cannot find first file in image sequence" [ -f "$(find "$dir" -name "$image.*.png" | sort | head -1)" ] || \
error "Cannot find first file in image sequence"
if [ "$FMT" = "webm" ] ; then if [ "$fmt" = "webm" ] ; then
if command -v avconv >/dev/null 2>&1 ; then if command -v avconv >/dev/null 2>&1 ; then
echo "Creating image with avconv..." echo "Creating image with avconv..."
avconv \ avconv \
-framerate $FPS \ -framerate "$fps" \
$START_NUMBER \ -i "${dir}/${image}.%04d.png" \
-i ${DIR}/${IMAGE}.%04d.png \
-c:v libvpx -crf 15 -b:v 1M \ -c:v libvpx -crf 15 -b:v 1M \
$VIDEO.$FMT "$video.$fmt"
else else
usage "Please install avconv" error "Please install avconv"
fi fi
else else
if command -v avconv >/dev/null 2>&1 ; then if ! command -v avconv >/dev/null 2>&1 ; then
echo "Creating image with avconv..." echo "Creating image with avconv..."
avconv \ avconv \
-framerate $FPS \ -framerate "$fps" \
$START_NUMBER \ -i "${dir}/${image}.%04d.png" \
-i ${DIR}/${IMAGE}.%04d.png \
-c:v libx264 -pix_fmt yuv420p \ -c:v libx264 -pix_fmt yuv420p \
$VIDEO.$FMT "$video.$fmt"
elif command -v mencoder >/dev/null 2>&1 ; then elif command -v mencoder >/dev/null 2>&1 ; then
echo "Creating image with mencoder..." echo "Creating image with mencoder..."
mencoder \ mencoder \
"mf://$DIR/$IMAGE.*.png" \ "mf://$dir/$image.*.png" \
-mf fps=$FPS \ -mf fps="$fps" \
-o $VIDEO.$FMT \ -o "$video.$fmt" \
-ovc x264 -ovc x264
else else
usage "Please install avconv or mencoder" error "Please install avconv or mencoder"
fi fi
fi fi

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -48,8 +48,6 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE cat<<USAGE
Usage: ${0##*/} [OPTION] <application> ... Usage: ${0##*/} [OPTION] <application> ...
@ -64,6 +62,12 @@ options:
* run a particular OpenFOAM version of <application> * run a particular OpenFOAM version of <application>
USAGE USAGE
}
error () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
@ -88,21 +92,21 @@ while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-m | -mode) -m | -mode)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile
shift shift
;; ;;
-p | -prefix) -p | -prefix)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile
prefixDir="$2" prefixDir="$2"
shift shift
;; ;;
-v | -version) -v | -version)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile
version="$2" version="$2"
shift shift
@ -112,7 +116,7 @@ do
break break
;; ;;
-*) -*)
usage "invalid option '$1'" error "invalid option '$1'"
;; ;;
*) *)
break break
@ -139,7 +143,7 @@ sourceRc()
} }
[ "$#" -ge 1 ] || usage "no application specified" [ "$#" -ge 1 ] || error "no application specified"
sourceRc sourceRc
exec "$@" exec "$@"

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -31,8 +31,6 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE cat<<USAGE
Usage: ${0##*/} [OPTION] <application> ... Usage: ${0##*/} [OPTION] <application> ...
@ -49,6 +47,12 @@ options:
Redirects the output to 'log' in the case directory Redirects the output to 'log' in the case directory
USAGE USAGE
}
error () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
@ -58,14 +62,14 @@ echoArgs() {
for stringItem in "$@"; do for stringItem in "$@"; do
echo -n "${addSpace}" printf "%s" "${addSpace}"
if [ "${stringItem##* }" = "$stringItem" ] if [ "${stringItem##* }" = "$stringItem" ]
then then
echo -n "$stringItem" printf "%s" "$stringItem"
addSpace=" " addSpace=" "
else else
echo -n "'$stringItem'" printf "%s" "'$stringItem'"
addSpace=" " addSpace=" "
fi fi
@ -76,38 +80,11 @@ echoArgs() {
unset version unset version
# Replacement for possibly buggy 'which'
findExec() { findExec() {
case "$1" in which "$1" 2>/dev/null
*/*) command -v "$1" >/dev/null 2>&1
if [ -x "$1" ]
then
echo "$1"
return 0
fi
;;
esac
oldIFS=$IFS
IFS=':'
for d in $PATH
do
# echo "testing: $d/$1" 1>&2
if [ -x "$d/$1" -a ! -d "$d/$1" ]
then
# echo "Found exec: $d/$1" 1>&2
IFS=$oldIFS
echo "$d/$1"
return 0
fi
done
IFS=$oldIFS
echo ""
return 1
} }
# Main script # Main script
#~~~~~~~~~~~~ #~~~~~~~~~~~~
unset parallelOpt screenOpt waitOpt unset parallelOpt screenOpt waitOpt
@ -118,11 +95,11 @@ while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-case) -case)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" cd "$2" 2>/dev/null || error "directory does not exist: '$2'"
shift 2 shift 2
;; ;;
-p | -parallel) -p | -parallel)
@ -142,7 +119,7 @@ do
shift shift
;; ;;
-v | -version) -v | -version)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
version="$2" version="$2"
shift 2 shift 2
;; ;;
@ -151,7 +128,7 @@ do
break break
;; ;;
-*) -*)
usage "invalid option '$1'" error "invalid option '$1'"
;; ;;
*) *)
break break
@ -159,7 +136,7 @@ do
esac esac
done done
[ "$#" -ge 1 ] || usage "No application specified" [ "$#" -ge 1 ] || error "No application specified"
# Use foamExec for a specified version # Use foamExec for a specified version
@ -169,11 +146,11 @@ then
# When possible, determine if application even exists # When possible, determine if application even exists
if [ -z "$version" ] if [ -z "$version" ]
then then
findExec $1 >/dev/null || usage "Application '$1' not found" findExec "$1" >/dev/null || error "Application '$1' not found"
fi fi
# Use foamExec for dispatching # Use foamExec for dispatching
APPLICATION=`findExec foamExec` || usage "'foamExec' not found" APPLICATION=$(findExec foamExec) || error "'foamExec' not found"
[ -n "$version" ] && APPLICATION="$APPLICATION -version $version" [ -n "$version" ] && APPLICATION="$APPLICATION -version $version"
@ -184,7 +161,7 @@ then
fi fi
else else
APPLICATION=`findExec $1` || usage "Application '$1' not found" APPLICATION=$(findExec "$1") || error "Application '$1' not found"
echo "Application : $1" echo "Application : $1"
shift shift
fi fi
@ -200,7 +177,7 @@ then
# #
if [ -r "processor0" ] if [ -r "processor0" ]
then then
NPROCS="`/bin/ls -1d processor* | wc -l`" NPROCS="$(/bin/ls -1d processor* | wc -l)"
else else
echo "Case is not currently decomposed" echo "Case is not currently decomposed"
if [ -r system/decomposeParDict ] if [ -r system/decomposeParDict ]
@ -218,7 +195,7 @@ then
# #
# Find mpirun # Find mpirun
# #
mpirun=`findExec mpirun` || usage "'mpirun' not found" mpirun=$(findExec mpirun) || error "'mpirun' not found"
mpiopts="-np $NPROCS" mpiopts="-np $NPROCS"
# #

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -35,11 +35,10 @@ siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site}
userDir=$HOME/.OpenFOAM userDir=$HOME/.OpenFOAM
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat <<USAGE cat <<USAGE
Usage: $Script [OPTIONS] <log> Usage: $Script [OPTIONS] <log file>
options:
-list lists but does not extract -list lists but does not extract
-n create single column files with the extracted data only -n create single column files with the extracted data only
-quiet quiet operation -quiet quiet operation
@ -49,12 +48,12 @@ Usage: $Script [OPTIONS] <log>
$Script - extracts xy files from OpenFOAM logs. $Script - extracts xy files from OpenFOAM logs.
USAGE USAGE
exit 1
} }
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
printHelp() { printHelp() {
usage
cat <<HELP cat <<HELP
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
The default is to extract for all the 'Solved for' variables the initial The default is to extract for all the 'Solved for' variables the initial
@ -96,8 +95,13 @@ Option -q suppresses the default information and only prints the extracted
variables. variables.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
HELP HELP
}
error () {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage usage
exit 1
} }

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2015-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -32,17 +32,15 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE cat<<USAGE
Usage: ${0##*/} [OPTION] <file> Usage: ${0##*/} [OPTION] <file>
options: options:
-h | -help print the usage -help | -h print the usage
-i | -idle <time> stops if <file> unchanging for <time> sec (default = 60) -idle | -i <time> stops if <file> unchanging for <time> sec (default 60s)
-l | -logscale plots data (y-axis) on log scale, e.g. for residuals -logscale | -l plots data (y-axis) on log scale, e.g. for residuals
-r | -refresh <time> refreshes display every <time> sec (default = 10) -refresh | -r <time> refreshes display every <time> sec (default 10s)
-y | -yrange <range> sets data (y-axis) <range>, format "[0:1]" -yrange | -y <range> sets data (y-axis) <range>, format "[0:1]"
Monitor data with Gnuplot from time-value(s) graphs written by OpenFOAM Monitor data with Gnuplot from time-value(s) graphs written by OpenFOAM
e.g. by functionObjects e.g. by functionObjects
@ -52,16 +50,22 @@ Example:
foamMonitor -l postProcessing/residuals/0/residuals.dat foamMonitor -l postProcessing/residuals/0/residuals.dat
USAGE USAGE
}
error() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
plotFileHeader() { plotFileHeader() {
cat<<EOF cat<<EOF
set term x11 1 font "helvetica,17" linewidth 1.5 persist noraise set term x11 1 font "helvetica,17" linewidth 1.5 persist noraise
$LOGSCALE $logscale
$YRANGE $yrange
set title "Data Monitoring" set title "Data Monitoring"
set xlabel "$XLABEL" set xlabel "$xlabel"
plot \\ plot \\
EOF EOF
} }
@ -69,48 +73,50 @@ EOF
plotFileFooter() { plotFileFooter() {
cat<<EOF cat<<EOF
pause $REFRESH pause $refresh
reread reread
EOF EOF
} }
howMany() ( set -f; set -- $1; echo $# ) howMany() ( set -f; set -- $1; echo $# )
isInteger() {
[ ! -z "${1##*[!0-9]*}" ] && echo "$1" && return 0
}
IDLE=60 idle=60
REFRESH=10 refresh=10
LOGSCALE="" logscale=""
YRANGE="" yrange=""
GNUPLOT=$(which gnuplot) command -v gnuplot >/dev/null 2>&1 || error "Gnuplot not installed"
! [ "x$GNUPLOT" = "x" ] || usage "Gnuplot not installed"
# parse options # parse options
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-i | -idle) -i | -idle)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
[ ! -z "${2##*[!0-9]*}" ] && IDLE=$2 || usage "Argument of '$1' is not an integer: '$2'" idle=$(isInteger "$2") || error "Argument of '$1' is not an integer: '$2'"
shift 2 shift 2
;; ;;
-l | -logscale) -l | -logscale)
LOGSCALE="set logscale y" logscale="set logscale y"
shift 1 shift 1
;; ;;
-r | -refresh) -r | -refresh)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
[ ! -z "${2##*[!0-9]*}" ] && REFRESH=$2 || usage "Argument of '$1' is not an integer: '$2'" refresh=$(isInteger "$2") || error "Argument of '$1' is not an integer: '$2'"
shift 2 shift 2
;; ;;
-y | -yrange) -y | -yrange)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
YRANGE="set yrange $2" yrange="set yrange $2"
shift 2 shift 2
;; ;;
-*) -*)
usage "unknown option: '$*'" error "unknown option: '$*'"
;; ;;
*) *)
break break
@ -118,64 +124,65 @@ do
esac esac
done done
[ $# -eq 1 ] || usage "Incorrect arguments specified" [ $# -eq 1 ] || error "Incorrect arguments specified"
[ -f $1 ] || usage "File $1 does not exit" [ -f "$1" ] || error "File $1 does not exit"
FILE=$1 file=$1
# Get KEYS from header # Get keys from header
KEYS=$(grep -E '^#' $FILE | tail -1) keys=$(grep -E '^#' "$file" | tail -1)
[ "x$KEYS" = "x" ] && KEYS="# Step" [ "x$keys" = "x" ] && keys="# Step"
NKEYS=$(howMany "$KEYS") n_keys=$(howMany "$keys")
NCOLS=$(tail -1 $FILE | awk '{ print NF}') n_cols=$(tail -1 "$file" | awk '{ print NF }')
# With full column labels, NKEYS = NCOLS + 1, since it includes "#" # With full column labels, n_keys = n_cols + 1, since it includes "#"
# If NKEYS > NCOLS + 1, REMOVE EXCESS KEYS # If n_keys > n_cols + 1, REMOVE EXCESS keys
NCOLSPONE=$(expr $NCOLS + 1) n_cols_pone=$(( n_cols + 1 ))
[ "$NKEYS" -gt "$NCOLSPONE" ] && KEYS=$(echo $KEYS | cut -d" " -f1-$NCOLSPONE) [ "$n_keys" -gt "$n_cols_pone" ] && \
NKEYS=$(howMany "$KEYS") keys=$(echo "$keys" | cut -d" " -f1-$n_cols_pone)
n_keys=$(howMany "$keys")
i=0 i=0
while [ "$NKEYS" -le "$NCOLS" ] while [ "$n_keys" -le "$n_cols" ]
do do
i=$(expr $i + 1) i=$(( i + 1 ))
KEYS="$KEYS data$i" keys="$keys data$i"
NKEYS=$(howMany "$KEYS") n_keys=$(howMany "$keys")
done done
# Remove # and Time keys # Remove # and Time keys
XLABEL=$(echo $KEYS | cut -d " " -f2) xlabel=$(echo "$keys" | cut -d " " -f2)
KEYS=$(echo $KEYS | cut -d " " -f3-) keys=$(echo "$keys" | cut -d " " -f3-)
GPFILE=$(mktemp) gp_file=$(mktemp)
plotFileHeader > $GPFILE plotFileHeader > "$gp_file"
i=1 i=1
for field in $KEYS for field in $keys
do do
i=$(expr $i + 1) i=$(( i + 1 ))
PLOTLINE="\"$FILE\" using 1:${i} with lines title \"$field\"" plot_line="\"$file\" using 1:${i} with lines title \"$field\""
if [ $i -lt $NCOLS ] if [ $i -lt "$n_cols" ]
then then
PLOTLINE="$PLOTLINE, \\" plot_line="$plot_line, \\"
fi fi
echo $PLOTLINE >> $GPFILE echo $plot_line >> "$gp_file"
done done
plotFileFooter >> $GPFILE plotFileFooter >> "$gp_file"
touch $FILE touch "$file"
$GNUPLOT $GPFILE & gnuplot "$gp_file" &
PID=$! pid=$!
while true while true
do do
MODTIME=$(stat --format=%Y $FILE) mod_time=$(stat --format=%Y "$file")
IDLEAGO=$(expr $(date +%s) - $IDLE) idle_ago=$(( $(date +%s) - idle ))
test "$MODTIME" -gt "$IDLEAGO" || break test "$mod_time" -gt "$idle_ago" || break
sleep $REFRESH sleep "$refresh"
done done
kill -9 $PID kill -9 $pid
rm $GPFILE rm "$gp_file"
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -30,12 +30,13 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
Script=${0##*/} Script=${0##*/}
DIR="$FOAM_ETC/codeTemplates/BC" dir="$FOAM_ETC/codeTemplates/BC"
usage() { usage() {
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE cat<<USAGE
Usage: $Script [-h | -help] <base> <type> <boundaryConditionName> Usage: $Script [OPTIONS] <base> <type> <boundaryConditionName>
options:
-help | -h help
* Create directory of source and compilation files for a new boundary condition * Create directory of source and compilation files for a new boundary condition
<boundaryConditionName> (dir) <boundaryConditionName> (dir)
@ -62,8 +63,14 @@ USAGE
exit 1 exit 1
} }
error() {
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1
}
cap() { cap() {
echo $1 | sed -e 's/^./\U&/' echo "$1" | sed -e 's/^./\U&/'
} }
# Implicitly covers a lone -help # Implicitly covers a lone -help
@ -71,105 +78,107 @@ cap() {
case "$1" in case "$1" in
(-h | -help) (-h | -help)
usage usage && exit 0
;; ;;
(-f | -fixedValue | fixedValue) (-f | -fixedValue | fixedValue)
BASE=fixedValue base=fixedValue
;; ;;
(-m | -mixed | mixed ) (-m | -mixed | mixed )
BASE=mixed base=mixed
;; ;;
(*) (*)
usage "Unknown <base> condition '$1'" error "Unknown <base> condition '$1'"
;; ;;
esac esac
shift shift
case "$1" in case "$1" in
(-a | -all | all | template) (-a | -all | all | template)
TYPE=Type type=Type
UNIT='VALUE-or-(VALUE 0 0)' unit='VALUE-or-(VALUE 0 0)'
;; ;;
(-s | -scalar | scalar) (-s | -scalar | scalar)
TYPE=scalar type=scalar
UNIT=VALUE unit=VALUE
;; ;;
(-v | -vector | vector) (-v | -vector | vector)
TYPE=vector type=vector
UNIT='(VALUE 0 0)' unit='(VALUE 0 0)'
;; ;;
(-t | -tensor | tensor) (-t | -tensor | tensor)
TYPE=tensor type=tensor
UNIT='(VALUE 0 0 0 0 0 0 0 0)' unit='(VALUE 0 0 0 0 0 0 0 0)'
;; ;;
(-symmTensor | symmTensor) (-symmTensor | symmTensor)
TYPE=symmTensor type=symmTensor
UNIT='(VALUE 0 0 0 0 0)' unit='(VALUE 0 0 0 0 0)'
;; ;;
(-sphericalTensor | sphericalTensor) (-sphericalTensor | sphericalTensor)
TYPE=sphericalTensor type=sphericalTensor
UNIT=VALUE unit=VALUE
;; ;;
(*) (*)
usage "Unknown <type> option '$1'" error "Unknown <type> option '$1'"
;; ;;
esac esac
shift shift
[ "$#" -eq 1 ] || usage "Wrong number of arguments" [ "$#" -eq 1 ] || error "Wrong number of arguments"
NAME=$1 name=$1
# Prevents over-writing of existing directory # Prevents over-writing of existing directory
[ -d $NAME ] && usage "$NAME directory already exists, aborting..." [ -d "$name" ] && error "$name directory already exists, aborting..."
echo "Creating $NAME directory" && mkdir $NAME echo "Creating $name directory" && mkdir "$name"
# Establish meta template files to copy # Establish meta template files to copy
FILES=$(cd ${DIR} && ls *.*) files=$(find "${dir}" -name "*.*" -type f -exec basename {} \;)
[ "$TYPE" = "Type" ] || FILES=$(cd ${DIR} && ls BC.[CH]) [ "$type" = "Type" ] || \
files=$(find "${dir}" -name "BC.[CH]" -type f -exec basename {} \;)
# Substitutions for meta-template files # Substitutions for meta-template files
FIELD="Field<${TYPE}>" field="Field<${type}>"
[ "$TYPE" = "Type" ] || FIELD=${TYPE}Field [ "$type" = "Type" ] || field=${type}Field
FVPATCHF=fvPatch$(cap $FIELD) fvpatchf=fvPatch$(cap $field)
CLASS=$NAME$(cap $FVPATCHF) class=$name$(cap "$fvpatchf")
PARENT=$BASE$(cap $FVPATCHF) parent=$base$(cap "$fvpatchf")
CONSTRUCT=$(echo $CLASS | sed 's/<Type>//g') construct=$(echo "$class" | sed 's/<Type>//g')
YEAR=$(date +%Y) year=$(date +%Y)
# Create some example values for the Description # Create some example values for the Description
n=0 n=0
for N in $(echo "ZERO ONE TWO THREE FOUR") for N in zero one two three four
do do
eval $(expr $N='$(echo $UNIT | sed "s#VALUE#$n#g")') eval $N="$(echo \"$unit\" | sed "s#VALUE#$n#g")"
n=$(( $n + 1 )) n=$(( n + 1 ))
done done
# Make substitutions to meta-template files # Make substitutions to meta-template files
for F in $FILES for f in $files
do do
EXT=$(echo $F | sed "s#BC##") ext=$(echo "$f" | sed "s#BC##")
NEWFILE=${CONSTRUCT}${EXT} new_file=${construct}${ext}
echo " Adding file ${NEWFILE}..." echo " Adding file ${new_file}..."
# Adds readScalar function when TYPE = scalar # Adds readScalar function when type = scalar
sed -e "s#TYPE#${TYPE}#g" \ # shellcheck disable=SC2154
-e "s#NAME#${NAME}#g" \ sed -e "s#TYPE#${type}#g" \
-e "s#BASE#${BASE}#g" \ -e "s#NAME#${name}#g" \
-e "s#CONSTRUCT#${CONSTRUCT}#g" \ -e "s#BASE#${base}#g" \
-e "s#YEAR#${YEAR}#g" \ -e "s#CONSTRUCT#${construct}#g" \
-e "s#CLASS#${CLASS}#g" \ -e "s#YEAR#${year}#g" \
-e "s#FIELD#${FIELD}#g" \ -e "s#CLASS#${class}#g" \
-e "s#FVPATCHF#${FVPATCHF}#g" \ -e "s#FIELD#${field}#g" \
-e "s#PARENT#${PARENT}#g" \ -e "s#FVPATCHF#${fvpatchf}#g" \
-e "s#ZERO#${ZERO}#g" \ -e "s#PARENT#${parent}#g" \
-e "s#ONE#${ONE}#g" \ -e "s#ZERO#${zero}#g" \
-e "s#TWO#${TWO}#g" \ -e "s#ONE#${one}#g" \
-e "s#THREE#${THREE}#g" \ -e "s#TWO#${two}#g" \
-e "s#FOUR#${FOUR}#g" \ -e "s#THREE#${three}#g" \
-e "s#FOUR#${four}#g" \
-e 's/>>/>>/g' \ -e 's/>>/>>/g' \
${DIR}/${F} > ${NAME}/${NEWFILE} "${dir}/${f}" > "${name}/${new_file}"
case $BASE in case $base in
fixedValue) fixedValue)
# refValue(), refGrad(), valueFraction() removed # refValue(), refGrad(), valueFraction() removed
# phip removed # phip removed
@ -178,7 +187,7 @@ do
-e '/refGrad/d' \ -e '/refGrad/d' \
-e '/valueFraction/d' \ -e '/valueFraction/d' \
-e '/const scalarField\& phip/,/);/d' \ -e '/const scalarField\& phip/,/);/d' \
${NAME}/${NEWFILE} "${name}/${new_file}"
;; ;;
mixed) mixed)
# evaluate() removed # evaluate() removed
@ -186,15 +195,15 @@ do
sed -i \ sed -i \
-e '/evaluate/d' \ -e '/evaluate/d' \
-e 's/operator==/refValue() =/g' \ -e 's/operator==/refValue() =/g' \
${NAME}/${NEWFILE} "${name}/${new_file}"
;; ;;
esac esac
case $TYPE in case $type in
Type) Type)
# Build Macro removed (in ..Fields.C) # Build Macro removed (in ..Fields.C)
sed -i -e '/Build Macro/,/^}/d' \ sed -i -e '/Build Macro/,/^}/d' \
${NAME}/${NEWFILE} "${name}/${new_file}"
;; ;;
*) *)
# template<class Type> removed # template<class Type> removed
@ -206,13 +215,15 @@ do
-e 's/this->//g' \ -e 's/this->//g' \
-e 's/\.template[\t ]*\([a-Z]\)/\.\1/g' \ -e 's/\.template[\t ]*\([a-Z]\)/\.\1/g' \
-e '/#ifdef NoRepository/,/\/\/ */d' \ -e '/#ifdef NoRepository/,/\/\/ */d' \
${NAME}/${NEWFILE} "${name}/${new_file}"
;; ;;
esac esac
done done
echo "Creating Make subdirectory" && cp -r ${DIR}/Make ${NAME} echo "Creating Make subdirectory" && cp -r "${dir}/Make" "${name}"
COMPILED=$(cd ${NAME} && ls -r1 *C | head -1) # ...Fields.C for template class
sed -i -e "s#NAME#${NAME}#g" -e "s#COMPILED.*#${COMPILED}#g" ${NAME}/Make/files # Get ...Fields.C for template class, otherwise ...Field.C
compiled=$(find "${name}" -name "*.C" -exec basename {} \; | sort | tail -1)
sed -i -e "s#NAME#${name}#g" -e "s#COMPILED.*#${compiled}#g" "${name}/Make/files"
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -33,8 +33,6 @@
# undefined behaviour # undefined behaviour
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
usage() { usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE cat<<USAGE
Usage: ${0##*/} [OPTION] [PARAVIEW_OPTION] Usage: ${0##*/} [OPTION] [PARAVIEW_OPTION]
@ -47,12 +45,17 @@ options:
-touchAll create .blockMesh, .OpenFOAM files (and for all regions) -touchAll create .blockMesh, .OpenFOAM files (and for all regions)
-help print the usage -help print the usage
paraview options start with a double dashes paraview options start with a double dashes
* start paraview $ParaView_VERSION with the OpenFOAM libraries * start paraview $ParaView_VERSION with the OpenFOAM libraries
USAGE USAGE
}
error() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
usage
exit 1 exit 1
} }
@ -77,7 +80,7 @@ while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help) -h | -help)
usage usage && exit 0
;; ;;
-block | -blockMesh) -block | -blockMesh)
extension=blockMesh extension=blockMesh
@ -89,12 +92,12 @@ do
shift shift
;; ;;
-case) -case)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" cd "$2" 2>/dev/null || error "directory does not exist: '$2'"
shift 2 shift 2
;; ;;
-region) -region)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ "$#" -ge 2 ] || error "'$1' option requires an argument"
regionName=$2 regionName=$2
shift 2 shift 2
;; ;;
@ -116,13 +119,13 @@ do
break # Stop here, treat this and balance as paraview options break # Stop here, treat this and balance as paraview options
;; ;;
*) *)
usage "unknown option/argument: '$*'" error "unknown option/argument: '$*'"
;; ;;
esac esac
done done
# Check that reader module has been built # Check that reader module has been built
if [ $requirePV -eq 1 -a ! -f $PV_PLUGIN_PATH/libPVFoamReader_SM.so ] if [ $requirePV -eq 1 -a ! -f "$PV_PLUGIN_PATH/libPVFoamReader_SM.so" ]
then then
cat<< BUILDREADER cat<< BUILDREADER
@ -153,7 +156,7 @@ hasDataArg()
done done
} }
hasDataArg $@ hasDataArg "$@"
# Get a sensible caseName from the directory name # Get a sensible caseName from the directory name
@ -163,7 +166,7 @@ fvControls="system"
if [ -n "$regionName" ] if [ -n "$regionName" ]
then then
if [ ! -d constant/$regionName ] if [ ! -d constant/"$regionName" ]
then then
echo "FATAL ERROR: Region $regionName does not exist" echo "FATAL ERROR: Region $regionName does not exist"
exit 1 exit 1
@ -186,7 +189,7 @@ all)
# Discover probable regions # Discover probable regions
for region in constant/* for region in constant/*
do do
if [ -d $region -a -d $region/polyMesh ] if [ -d "$region" -a -d "$region"/polyMesh ]
then then
regionName=${region##*/} regionName=${region##*/}
touch "$caseName{$regionName}.$extension" touch "$caseName{$regionName}.$extension"
@ -258,14 +261,14 @@ else
[ -n "$warn" ] || { [ -n "$warn" ] || {
echo "Cannot locate OpenFOAM-format case files" echo "Cannot locate OpenFOAM-format case files"
echo -n "Would you like to open ParaView anyway <Y|n>:" printf "Would you like to open ParaView anyway <Y|n>:"
read open read open
[ "$open" = "" ] || echo $open | grep -iqE "^y" && paraview [ "$open" = "" ] || echo "$open" | grep -iqE "^y" && paraview
exit exit
} }
# Only create/remove caseFile if it didn't already exist # Only create/remove caseFile if it didn't already exist
[ -e $caseFile ] || { [ -e "$caseFile" ] || {
trap "rm -f $caseFile 2>/dev/null; exit 0" EXIT TERM INT trap "rm -f $caseFile 2>/dev/null; exit 0" EXIT TERM INT
touch "$caseFile" touch "$caseFile"
echo "Created temporary '$caseFile'" echo "Created temporary '$caseFile'"

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -46,7 +46,7 @@ do
if [ -d "$i" ] if [ -d "$i" ]
then then
echo "removing all core files: $i" echo "removing all core files: $i"
find $i \( -type f -name 'core' -o -name 'core.[1-9]*' -o -name 'vgcore.*' \) -print | xargs -t rm 2>/dev/null find $i \( -type f -name 'core' -o -name 'core.[1-9]*' -o -name 'vgcore.*' \) -print0 | xargs -t rm 2>/dev/null
else else
echo "no directory: $i" 1>&2 echo "no directory: $i" 1>&2
fi fi

View File

@ -3,7 +3,7 @@
# ========= | # ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration | # \\ / O peration |
# \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation # \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# License # License
@ -46,7 +46,7 @@ do
if [ -d "$i" ] if [ -d "$i" ]
then then
echo "removing all *~ files: $i" echo "removing all *~ files: $i"
find $i \( -name '*~' -o -name '.*~' \) -print | xargs -t rm 2>/dev/null find $i \( -name '*~' -o -name '.*~' \) -print0 | xargs -t rm 2>/dev/null
else else
echo "no directory: $i" 1>&2 echo "no directory: $i" 1>&2
fi fi