我想将 /foo/bar/..
转换为 /foo
有没有 bash 命令可以做到这一点?
编辑:在我的实际情况下,该目录确实存在。
最佳答案
如果你想从路径中选择文件名的一部分,“dirname”和“basename”是你的 friend ,“realpath”也很方便。
dirname /foo/bar/baz
# /foo/bar
basename /foo/bar/baz
# baz
dirname $( dirname /foo/bar/baz )
# /foo
realpath ../foo
# ../foo: No such file or directory
realpath /tmp/../tmp/../tmp
# /tmp
realpath
替代方案
如果你的shell不支持realpath
,你可以试试
readlink -f /path/here/..
还有
readlink -m /path/there/../../
工作原理与
相同realpath -s /path/here/../../
因为路径不需要存在就可以标准化。
https://stackoverflow.com/questions/284662/