Bash 通过目录路径向上搜索以查找特定目录
我知道如何在层次结构下递归搜索文件或目录,但不知道如何在层次结构上搜索并找到特定的目录 给定路径和文件,例如这些家伙:Bash 通过目录路径向上搜索以查找特定目录,bash,unix,command-line,terminal,Bash,Unix,Command Line,Terminal,我知道如何在层次结构下递归搜索文件或目录,但不知道如何在层次结构上搜索并找到特定的目录 给定路径和文件,例如这些家伙: /Users/username/projects/project\u name/lib/sub\u dir/file.rb /Users/username/projects/project_name/lib/sub_dir/2nd_sub_dir/3rd_sub_dir/file.rb /Users/username/projects/project\u name/spec/s
/Users/username/projects/project\u name/lib/sub\u dir/file.rb
/Users/username/projects/project_name/lib/sub_dir/2nd_sub_dir/3rd_sub_dir/file.rb
/Users/username/projects/project\u name/spec/sub\u dir/file.rb
如何使用终端可以获得:
/Users/username/projects/project\u name
注意:我知道project\u name
下一个目录是spec/
或lib/
您可以使用perl:
cat file | perl -pe "s#(.+)(?:spec|lib).+#\1#"
文件中的位置:
/用户/username/projects/project_name/lib/sub_dir/file.rb/username/projects/project_name/lib/sub_dir/2nd_sub_dir/3rd_sub_dir/file.rb/username/projects/project_name/spec/sub_dir/file.rb
或者您可以使用sed:
cat file | sed 's/\(^.*\)\(spec\|lib\).*/\1/'
纯bash(无子进程生成或其他命令)。根据您希望它的灵活性,您可以首先考虑通过<代码> RealLink -FN < /代码>运行<代码> ROOTDIR()/<代码>函数的参数。解释道
你到底想完成什么?当然有更好的办法,但我们必须知道你为什么要这么做。我有一种感觉,这将成为一个。通过
学习了一些新东西。谢谢:-)那么你正在寻找文件路径列表的共同祖先吗?@FredrikPihl Yep:-)我实际上将其更改为
,因此它适用于以下所有代码块。@JonathonReinhart-更好。我将从现在开始使用它。问题是没有文件,只有一个文件层次结构,也就是说,没有要解析的文件。它就像一个符咒,但我正在努力弄清楚它到底是怎么做的。你能给我简要介绍一下吗。谢谢
#!/bin/bash
function rootdir {
local filename=$1
local parent=${filename%%/lib/*}
if [[ $filename == $parent ]]; then
parent=${filename%%/spec/*}
fi
echo $parent
}
# test:
# rootdir /Users/username/projects/project_name/lib/sub_dir/file.rb
# rootdir /Users/username/projects/project_name/spec/sub_dir/file.rb
# rootdir /Users/username/projects/project_name/lib/sub_dir/2nd_sub_dir/3rd_sub_dir/file.rb
# output:
# /Users/username/projects/project_name
# /Users/username/projects/project_name
# /Users/username/projects/project_name