Shell 如果文件不在当前目录中,请在父目录中查找该文件

Shell 如果文件不在当前目录中,请在父目录中查找该文件,shell,zsh,Shell,Zsh,我正在尝试创建一个shell函数,用于查找当前目录中是否存在文件。如果文件不存在(如果当前目录不存在),则应尝试使用父目录,并转到文件系统的根目录(转到~就足够了) 我试图实现的是在提示符下显示用于项目的当前RubyonRails版本。简单的方法是调用bundle show rails并解析字符串,但速度相当慢;所以我想解析包含版本信息的文件,Gemfile.lock。我目前拥有的只有在我位于项目根目录(Gemfile.lock所在的位置)时才起作用 这也可以用来解析git配置文件,尽管git

我正在尝试创建一个shell函数,用于查找当前目录中是否存在文件。如果文件不存在(如果当前目录不存在),则应尝试使用父目录,并转到文件系统的根目录(转到~就足够了)

我试图实现的是在提示符下显示用于项目的当前RubyonRails版本。简单的方法是调用
bundle show rails
并解析字符串,但速度相当慢;所以我想解析包含版本信息的文件,
Gemfile.lock
。我目前拥有的只有在我位于项目根目录(Gemfile.lock所在的位置)时才起作用

这也可以用来解析git配置文件,尽管
git config
相当快

谢谢你这样抽出时间

好吗

#!/bin/zsh

# the function    
findfile_parent() {
 FILE=$1
 while [ ! -e "${FILE}" ]; do
  if [ "$(pwd)" = "/" ]; then
    return
  fi
  cd ..
 done
 echo "$(pwd)/${FILE}"
}

# usage example
SEARCHFILE=foo.pyl
UPFILE=$(findfile_parent ${SEARCHFILE})
if [ "x${UPFILE}" != "x" ]; then
 echo "found file ${SEARCHFILE} as ${UPFILE}"
else
 echo "couldn't find file ${SEARCHFILE}"
fi

请参阅以下两个有用的链接以了解您的解决方案


):

我已经找到了链接,但我的目标是用shell脚本,而不是ruby