blob: 4c652c1fcbd844b89c58e64ff5f6230683aeb3a2 (
plain) (
blame)
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
|
#!/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
|