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)")"如果你想要第二个父目录