#!/bin/bash
function upsearch () {
test / == "$PWD" && return || test -e "$1" && echo "found: " "$PWD" && return || cd .. && upsearch "$1"
}
Esta função vai subir a partir do diretório atual. Note que é uma função e mudará o diretório enquanto estiver percorrendo. Ele irá parar no diretório, onde encontrar o arquivo, e irá até a raiz / se não.
Você pode querer alterá-lo para um script em vez de uma função e, talvez, voltar, se o arquivo não for encontrado no diretório raiz.
Se você nunca quiser fazer o cd para o diretório:
upsearch () {
slashes=${PWD//[^\/]/}
directory="$PWD"
for (( n=${#slashes}; n>0; --n ))
do
test -e "$directory/$1" && echo "$directory/$1" && return
directory="$directory/.."
done
}
Isso resultará em resultados como /home/cory/a/b/c/../../../happy se o arquivo estiver em / home / cory /. Se você precisa de um caminho limpo, você poderia fazer algumas
cd "$directory"
echo "$PWD"
cd -
no sucesso.