Shell 脚本 - 测试目录是否存在于当前目录或父/祖先目录中

发布于 2025-01-08 06:02:21 字数 228 浏览 0 评论 0原文

我使用以下代码来检测当前目录中是否存在文件夹 .hg 。如果不存在,则该函数返回:

if [ ! -d ".hg" ]; then
  return
fi

如何修改它以检查 .hg 是否存在于当前目录父/祖先目录中?我想如果它不是像 -d 这样的选项,那么解决方案将是递归的。

I am using the following code to detect if the folder .hg exists in the current directory. If it doesn't, then the function returns:

if [ ! -d ".hg" ]; then
  return
fi

How can I modify this to check if .hg exists either in the current directory or in a parent / ancestor directory? I'd imagine if it isn't an option such as -d then the solution is going to be recursive.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

剩余の解释 2025-01-15 06:02:21

我只是在这个问题上作弊:

if ! hg status > /dev/null 2>&1; then
    return
fi

只要您位于水银树内的某个位置,hg status 就应该成功。

I'd just cheat on this one:

if ! hg status > /dev/null 2>&1; then
    return
fi

hg status should be successful as long as you are somewhere inside a mercurial tree.

清君侧 2025-01-15 06:02:21

这将在前面的目录中搜索 d 指定的目录

    d=.hg
     r=1
        for i in $(seq 0 $(pwd|tr -cd '/'|wc -c)); do
            if [ -d "$d" ]; then
                r=0
            fi
            d=../$d
        done
        if [ r==1 ]; then
           return

This searches the preceding directories for the directory specified by d

    d=.hg
     r=1
        for i in $(seq 0 $(pwd|tr -cd '/'|wc -c)); do
            if [ -d "$d" ]; then
                r=0
            fi
            d=../$d
        done
        if [ r==1 ]; then
           return
一花一树开 2025-01-15 06:02:21

另一种方法是将测试包装在 while 循环中,该循环一直持续到当前工作目录为 /,并在检查 .hg 目录是否存在后转到 cd ..。

Another way to do this would be to wrap the test in a while loop that continues until the current working directory is /, and to cd .. after checking for the presence of the .hg directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文