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
|
#!/bin/sh
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2016 OpenFOAM Foundation
# Copyright (C) 2018 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# <http://www.gnu.org/licenses/>.
#
# Script
# foamSearch
#
# Description
# Search a directory for dictionary files of a particular name and
# extract entries of a particular keyword, sorting into a unique list.
#
# Requires foamDictionary.
#
#------------------------------------------------------------------------------
printHelp() {
# Print usage to stdout so that it can be captured for bash completion
cat<<USAGE
Usage: ${0##*/} [OPTIONS] <directory> <keyword> <fileName>
${0##*/} [OPTIONS] <keyword> <fileName>
Options:
-c | -count prefix lines by the number of occurrences
-help help
* Searches the <directory> for files named <fileName> and extracts entries
with <keyword>. Sorts result into a list of unique entries.
Uses the cwd if the <directory> is not provided.
Examples:
* Default ddtSchemes entries in the fvSchemes files in all tutorials:
foamSearch \$FOAM_TUTORIALS ddtSchemes.default fvSchemes
* Relaxations factors for U in fvSolutions files in all tutorials:
foamSearch -count \$FOAM_TUTORIALS relaxationFactors.equations.U fvSolution
USAGE
exit 0 # A clean exit
}
# Report error and exit
die()
{
exec 1>&2
echo
echo "Error encountered:"
while [ "$#" -ge 1 ]; do echo " $1"; shift; done
echo
echo "See '${0##*/} -help' for usage"
echo
exit 1
}
#-------------------------------------------------------------------------------
# Parse options
unset optCount
unset dirName keyword fileName
while [ "$#" -gt 0 ]
do
case "$1" in
-h | -help*)
printHelp
;;
-c | -count)
optCount="-c"
shift
;;
-*)
die "unknown option: '$1'"
;;
*)
break
;;
esac
done
# Basic checks
if [ "$#" -eq 2 ]
then
dirName="./"
keyword="$1"
fileName="$2"
elif [ "$#" -eq 3 ]
then
dirName="$1"
keyword="$2"
fileName="$3"
else
die "Expected 2 or 3 arguments, but found $# instead"
fi
[ -d "$dirName" ] || die "Not a directory: $dirName"
command -v foamDictionary > /dev/null || die "No foamDictionary command"
#-------------------------------------------------------------------------------
fileList=$(find $dirName -name "$fileName" -type f)
[ -n "$fileList" ] || {
echo "No '$fileName' file found in $dirName" 1>&2
exit 2
}
echo "Processing $(echo $fileList | wc -w) $fileName files..." 1>&2
tmpFile=${TMPDIR:-/tmp}/foamSearch.$$
trap "rm -f $tmpFile 2>/dev/null; exit 0" EXIT TERM INT
for i in $fileList
do
foamDictionary -entry "$keyword" $i 2>/dev/null
done > $tmpFile
[ -s "$tmpFile" ] && \
sort $tmpFile | uniq $optCount | sed '/^[\t 1-9]*$/d' || \
echo "No keyword '$keyword' found in '$fileName' files" 1>&2
#------------------------------------------------------------------------------
|