递归查找父目录

时间:2014-07-29 07:53:24

标签: directory parent

我正在编写一个脚本,要求我找到现有目录的父目录 假设我有一个名为deep的目录,它位于/path/is/very/deep/下。我需要找到“path”目录,但不能找到“/".

尝试了几个代码组合,但似乎我陷入了死锁。

感谢任何帮助。

这是我的代码无效。

if [ $dir_name != "/"  || $path != "/" ]
then
path=`dirname $dir_name`
dir_name=`dirname $path`
echo $path
else
dir_name=$path
echo $dirname
fi

2 个答案:

答案 0 :(得分:1)

这是解决问题的另一种方法:

通常,您需要做的就是在第二个/字符之后(包括)删除字符串中的所有字符。 Linux终端具有允许您执行此操作的sed功能。

Terminal/code中尝试这一行:

echo '/path/is/very/deep' | sed  -r 's:^(/[^/]*).*$:\1:'

您可以删除echo命令并根据需要将其分配给代码中的任何变量。 编辑:在sed中,反斜杠(/)也用作分隔符,您必须使用正斜杠(\)对其进行转义。由于某种原因,括号也会被转义。

答案 1 :(得分:0)

path="$( echo "${dir_name}" | sed -e 's|/[^/]*/\{0,1\}$||;s|^$|/|' )"

(posix compliance)并为/,/ bla,/ bla /,bla / bla,...

工作