从 bash 中的相对路径获取文件父文件的父文件的完整路径

Get full path of a parent of a parent of a file from relative path in bash

我正在 bash 中寻找一种方法来获取给定文件的父文件的父文件的完整路径。例如 user@host:~/grand-parent/parent $ {get-grand-parent} file 应该 return /home/user/grand-parent/.

我曾多次尝试使用 dirname,但显然它只是拆分了传递的字符串和 return 倒数第二个路径。 dirname $(dirname parent/file) returns . 就像 dirname $(dirname $(dirname parent/file)),所以它只有在我传递完整路径时才有效。

实现此目标的最佳方法是什么?

调用 dirname 一次以获取父 paht。

$ pwd
/opt
$ dirname mediawiki/maintenance
mediawiki
$ dirname mediawiki/maintenance/mssql/
mediawiki/maintenance

要获取给出文件夹或文件相对路径的完整路径,请使用以下方法之一

1 - 真实路径

$ realpath mediawiki/LocalSettings.php
/opt/mediawiki/LocalSettings.php

2 - 阅读链接

$ readlink -m mediawiki/LocalSettings.php
/opt/mediawiki/LocalSettings.php

对于内置解决方案,您必须有创意

echo "$(cd "$(dirname "mediawiki/LocalSettings.php")"; pwd)/$(basename "mediawiki/LocalSettings.php")"

我根据@JoaoVitorino 的回答提出的解决方案。

$ pwd
/home/user/grand-parent/parent
$ dirname $(dirname $(realpath file))
/home/user/grand-parent