Пожалуйста, попробуйте следующее:
path="aa/bb/cc"
file="x"
while true; do
if [[ -f "$path/$file" ]]; then
echo "Found: $path/$file"
fi
if [[ $path =~ ^/?[^/]+$ ]]; then
break
fi
path="${path%/*}"
done
Все сводится к проблеме, как генерировать верхние каталоги из
данный путь. Мой код выше будет работать для обоих случаев
абсолютный путь и относительный путь.
Чтобы принять путь, который начинается с .
или ..
, небольшой
потребуется модификация в регулярном выражении.
[EDIT]
Если вы хотите обработать заказ как aa
, aa/bb
, .., попробуйте
следующее:
path="aa/bb/cc"
file="x"
while true; do
array+=("$path")
if [[ $path =~ ^/?[^/]+$ ]]; then
break
fi
path="${path%/*}"
done
for (( i=${#array[@]}-1; i>=0; i-- )); do
p="${array[$i]}"
if [[ -f "$p/$file" ]]; then
echo "Found: $p/$file"
fi
done
[EDIT]
Если вы хотите включить корневой каталог /
в путь поиска, когда указан абсолютный путь,
пожалуйста попробуйте:
path="/aa/bb/cc"
file="x"
while true; do
array+=("$path")
if [[ $path =~ ^(/|[^/]+)$ ]]; then
break
elif [[ $path =~ ^/[^/]+$ ]]; then
path="/"
else
path="${path%/*}"
fi
done
for (( i=${#array[@]}-1; i>=0; i-- )); do
p="${array[$i]}"
if [[ -f "$p/$file" ]]; then
echo "Found: $p/$file"
fi
done