How to search *upwards* for file? (reverse find)

4

2

I'd like to search "upwards" for a file in shell script, e.g. check $PWD, then $PWD/.., then $PWD/../.., etc. until hitting the root. Before I go and roll my own, is there some builtin bash/zsh/find magic that will do this for me?

Joseph Garvin

Posted 2012-02-24T18:22:48.293

Reputation: 199

Answers

3

Well i have no clue how to do this in zsh since i use bash: but i tried this one liner

START=$PWD; while [ $PWD != "/" ]; \
do ls|grep file && echo $PWD ;cd ..; done ; cd $START

If you want to stop when you find something you could use:

START=$PWD; while [ $PWD != "/" ]; do \
ls|grep file && echo $PWD && cd $START && break;cd ..; done

As far as i know is there no such tool that could do this.

l1zard

Posted 2012-02-24T18:22:48.293

Reputation: 933

1

Using shell builtins:

(while [[ ! -f $file ]] && [[ $PWD != / ]]; do \cd ..; done;
if [[ -f $file ]];then echo $PWD/$file;fi)

jackr

Posted 2012-02-24T18:22:48.293

Reputation: 113