加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash:搜索目录树

发布时间:2020-12-15 16:59:23 所属栏目:安全 来源:网络整理
导读:我有一个源代码树,其根目录是/ home / me / workspace.有很多级别的子目录很多.特别是有一个包含一些工具的路径: /home/me/workspace/tools/scripts 我正在写一个bash函数,我可以从树中的任何地方调用我传递字符串工具/脚本.该函数应该从当前工作目录迭代到
我有一个源代码树,其根目录是/ home / me / workspace.有很多级别的子目录很多.特别是有一个包含一些工具的路径:
/home/me/workspace/tools/scripts

我正在写一个bash函数,我可以从树中的任何地方调用我传递字符串工具/脚本.该函数应该从当前工作目录迭代到/寻找路径片段工具/脚本,然后如果找到它,则打印出找到它的绝对路径.在此示例中,将打印/ home / me / workspace.如果根本找不到路径片段,则不打印任何内容.

我已经有了以下bash函数,它为我做了这个:

search_up ()
(
    while [ $PWD != "/" ]; do
        if [ -e "$1" ]; then
            pwd
            break
        fi
        cd ..
    done
)

但这似乎有点啰嗦.我想知道是否有任何其他方法可以在bash本身,或者在一个find命令或任何其他常见实用程序中执行此操作.我特别期待可读性和简洁性.

注意我不是在寻找整个树的完整递归搜索.

我的bash也不是最新的,所以请不要使用最新的,最棒的:

$bash --version
GNU bash,version 3.00.15(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation,Inc.
$
这应该工作,但告诉我它是否需要与POSIX兼容.这样做的好处是您不需要将目录更改为更高级别来进行搜索,也不需要使用子shell.
#!/bin/bash

search_up() {
    local look=${PWD%/}

    while [[ -n $look ]]; do
        [[ -e $look/$1 ]] && {
            printf '%sn' "$look"
            return
        }

        look=${look%/*}
    done

    [[ -e /$1 ]] && echo /
}

search_up "$1"

例:

bash script.sh /usr/local/bin

输出:

/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读