Uma versão ainda mais geral que permite o uso de findopções:
#!/bin/bash
set -e
path="$1"
shift 1
while [[ $path != / ]];
do
find "$path" -maxdepth 1 -mindepth 1 "$@"
# Note: if you want to ignore symlinks, use "$(realpath -s "$path"/..)"
path="$(readlink -f "$path"/..)"
done
Por exemplo (supondo que o script seja salvo como find_up.sh)
find_up.sh some_dir -iname "foo*bar" -execdir pwd \;
... imprimirá os nomes de todos some_diros ancestrais (incluindo ele próprio) até os /quais um arquivo com o padrão seja encontrado.
Ao usar readlink -fo script acima, siga os links simbólicos no caminho, conforme observado nos comentários. Em realpath -svez disso, você pode usar se desejar seguir os caminhos pelo nome ("/ foo / bar" aumentará para "foo" mesmo que "bar" seja um link simbólico) - no entanto, isso requer instalação realpathque não é instalada por padrão em maioria das plataformas.