gpt4 book ai didi

Bash:搜索目录树

转载 作者:行者123 更新时间:2023-11-29 09:00:41 25 4
gpt4 key购买 nike

我有一个源代码树,其根位于 /home/me/workspace 之类的地方。有很多子目录很多层次。特别是有一个包含一些工具的路径:

/home/me/workspace/tools/scripts

我正在编写一个 bash 函数,我可以从我将字符串 tools/scripts 传递到的树中的任何位置调用它。该函数应该从当前工作目录迭代到 / 寻找路径片段 tools/scripts,然后如果找到它,打印出它所在的绝对路径成立。在此示例中,将打印 /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 '%s\n' "$look"
return
}

look=${look%/*}
done

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

search_up "$1"

例子:

bash script.sh /usr/local/bin

输出:

/

关于Bash:搜索目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com