aboutsummaryrefslogtreecommitdiff
path: root/scripts/utils.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/utils.sh')
-rwxr-xr-xscripts/utils.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/scripts/utils.sh b/scripts/utils.sh
new file mode 100755
index 0000000..4c652c1
--- /dev/null
+++ b/scripts/utils.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env sh
+
+set -e -o pipefail
+
+dir_has_file() {
+ dir="$1"; shift;
+ for arg in ${@}; do
+ if [ -e "$dir/$arg" ]; then
+ return 0;
+ fi
+ done
+ return 1;
+}
+
+find_closest() {
+ init_dir="${1:-"$PWD"}"; shift;
+ dir="$init_dir";
+ while [ "$dir" != "" ] && [ "$dir" != "." ]; do
+ if [ "$dir" == "/" ]; then
+ dir="$init_dir"
+ break;
+ fi
+ if dir_has_file "$dir" "$@"; then
+ break;
+ fi
+ dir=$(dirname "$dir");
+ done
+ if [ -f "$dir" ]; then
+ dirname "$dir";
+ else
+ echo "$dir";
+ fi
+}
+
+cmd="$1"; shift;
+case "$cmd" in
+ find_closest) find_closest "$@" ;;
+esac