bash获取当前目录的父目录
如果我有这样的文件path
/home/smith/Desktop/Test /home/smith/Desktop/Test/
我该如何改变string,以便得到父目录?
例如
/home/smith/Desktop /home/smith/Desktop/
dir=/home/smith/Desktop/Test parentdir="$(dirname "$dir")"
如果还有斜线,也可以使用。
…但是“在这里看到”是什么被打破了。 这是修复:
> pwd /home/me > x='Om Namah Shivaya' > mkdir "$x" && cd "$x" /home/me/Om Namah Shivaya > parentdir="$(dirname "$(pwd)")" > echo $parentdir /home/me
如果/home/smith/Desktop/Test/../
是你想要的:
dirname 'path/to/child/dir'
如这里所见。
显然,父目录是通过简单地追加点号文件名给出的:
/home/smith/Desktop/Test/.. # unresolved path
但是你必须要解决的path(一个没有任何点状path组件的绝对path):
/home/smith/Desktop # resolved path
使用dirname
的最佳答案的问题是,当您用点号inputpath时,它们不起作用:
$ dir=~/Library/../Desktop/../.. $ parentdir="$(dirname "$dir")" $ echo $parentdir /Users/username/Library/../Desktop/.. # not fully resolved
这更强大 :
dir=/home/smith/Desktop/Test parentdir=`eval "cd $dir;pwd;cd - > /dev/null"`
你可以喂它/home/smith/Desktop/Test
,但也更复杂的path,如:
$ dir=~/Library/../Desktop/../.. $ parentdir=`eval "cd $dir;pwd;cd - > /dev/null"` $ echo $parentdir /Users # the fully resolved path!
只要使用echo $(cd ../ && pwd)
在你想要查找的目录的父目录中工作。 这个链条还有没有尾随斜线的附加好处。
根据您是否需要绝对path,您可能需要采取额外步骤:
child='/home/smith/Desktop/Test/' parent=$(dirname "$child") abs_parent=$(realpath "$parent")
使用这个: export MYVAR="$(dirname "$(dirname "$(dirname "$(dirname $PWD)")")")"
如果你想要第四个父目录
export MYVAR="$(dirname "$(dirname "$(dirname $PWD)")")"
如果你想要第三个父目录
export MYVAR="$(dirname "$(dirname $PWD)")"
如果你想要第二个父目录