bash:按名称获取父目录的路径

时间:2015-06-29 15:36:14

标签: bash shell

我试图获取最近的名为foo的父目录的路径:

/this/is/the/path/to/foo/bar/baz

yields

/this/is/the/path/to/foo

知道我是怎么做到的吗?

2 个答案:

答案 0 :(得分:2)

使用BASH字符串操作:

p='/this/is/the/path/to/foo/bar/baz'
name='foo'

r="${p%/$name/*}/$name"

echo "$r"
/this/is/the/path/to/foo

或者更好的是使用:

p='/this/is/afoo/food/path/to/foo/bar/baz'
echo "${p/\/$name\/*/\/$name}"
/this/is/afoo/food/path/to/foo

BASH FAQ Reference

答案 1 :(得分:0)

试试这个:这个操作(使用%符号)将删除foo之后的任何内容(如果它位于右侧的变量 var 中),然后用foo后缀。

echo ${var%/foo/*}foo


echo ${var/\/foo\/*/\/foo}

从上面的命令中删除 foo (最后)将给出第一次出现foo文件夹的父文件夹。包括foo会给你第一个foo文件夹作为父文件。

PS :如果路径中没有“/ foo /”文件夹,那么,上面的echo命令将输出给定路径的值(即$ var),也就是它'为你的目的输出错误的输出 OR 它只有在给定的路径,即$ var / foo 的情况下才能正常工作。