如果文件不在当前目录中,则在父目录中查找文件

Posted

技术标签:

【中文标题】如果文件不在当前目录中,则在父目录中查找文件【英文标题】:Look for a file in parent dir if it is not in current dir 【发布时间】:2013-01-21 08:36:33 【问题描述】:

我正在尝试创建一个在当前目录中查找文件存在的 shell 函数。如果当前目录不存在该文件,则应尝试父目录,并上到文件系统的根目录(上到〜应该绰绰有余)。

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

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

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

喜欢这样吗?

#!/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

【讨论】:

【参考方案2】:

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

Get parent directory of current directory in Ruby

How to check for file existence

):

【讨论】:

我已经找到了链接,但我的目标是在 shell 脚本中完成,而不是 ruby​​

以上是关于如果文件不在当前目录中,则在父目录中查找文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux find

如何在Linux系统上显示当前及子目录中的文件数量

linux查找当前目录下所有子目录特定文件类型需要查找的文件内容

MFC怎么查找当前目录以及子目录下的*_DS.TXT文件?

find命令

find命令总结与实战