如果我有一个文件路径,例如…
/home/smith/Desktop/Test
/home/smith/Desktop/Test/
我如何改变字符串,使它将是父目录?
e.g.
/home/smith/Desktop
/home/smith/Desktop/
如果我有一个文件路径,例如…
/home/smith/Desktop/Test
/home/smith/Desktop/Test/
我如何改变字符串,使它将是父目录?
e.g.
/home/smith/Desktop
/home/smith/Desktop/
当前回答
如果出于某种原因,你想要浏览特定数量的目录,你也可以这样做:nth_path=$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && & cd ../../../ && pwd)。这将提供3个父目录
其他回答
显然,父目录是通过简单地附加点。点文件名来给出的:
/home/smith/Desktop/Test/.. # unresolved path
但你必须要解析路径(没有任何点-点路径组件的绝对路径):
/home/smith/Desktop # resolved path
使用dirname的顶部答案的问题是,当你输入一个带有点号的路径时,它们不起作用:
$ dir=~/Library/../Desktop/../..
$ parentdir="$(dirname "$dir")"
$ echo $parentdir
/Users/username/Library/../Desktop/.. # not fully resolved
这个更强大:
dir=/home/smith/Desktop/Test
parentdir=$(builtin cd $dir; pwd)
你可以在/home/smith/Desktop/Test/..,但也有更复杂的路径,比如:
$ dir=~/Library/../Desktop/../..
$ parentdir=$(builtin cd $dir; pwd)
$ echo $parentdir
/Users # the fully resolved path!
注意:使用内置确保不会调用用户定义的cd函数变体,而是调用没有输出的默认实用程序形式。
这个会被放到父文件夹中
cd ../
如果/home/smith/Desktop/Test/../是你想要的:
dirname 'path/to/child/dir'
如图所示。
根据你是否需要绝对路径,你可能需要额外的步骤:
child='/home/smith/Desktop/Test/'
parent=$(dirname "$child")
abs_parent=$(realpath "$parent")
使用这个:export MYVAR="$(dirname "$(dirname "$(dirname "$(dirname $PWD)")")")")")")"如果你想要第四个父目录
出口myvar# = " $(目录名“$(目录名(目录名$ PWD)美元)”)” 如果你想要第三个父目录
输出MYVAR="$(dirname $PWD)")" 如果你想要第二个父目录