131 lines
3.4 KiB
Bash
Executable File
131 lines
3.4 KiB
Bash
Executable File
#!/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, distributed under GPL-3.0-or-later.
|
|
#
|
|
# 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
|
|
|
|
#------------------------------------------------------------------------------
|