我正在寻找一种在bash中规范化任意文件路径的方法,将.
和..
解析为它们的绝对值。例子:
> cd /foo/bar
> normalize_path "."
/foo/bar
> normalize_path "../baz"
/foo/baz
> normalize_path "../../folder/that/doesnt/exist/"
/folder/that/doesnt/exist
注意在上面的例子中,normalize_path
返回一个值,即使路径不对应于一个真正的文件夹或文件。我在StackOverflow(例1,例2)上看到的关于绝对或规范化路径的所有先前问题都假设路径指向一个真实的文件,并使用realpath
或pwd
对其进行规范化,但这对我的用例不起作用。
换句话说,我正在寻找一个bash函数,它纯粹将路径作为字符串操作,而不实际查看文件系统,类似于file。
Readlink是可行的方法,或者在您的情况下使用greadlink。它在GNU核心实用程序包中。"brew install coretils "(如果你使用home-brew)。然后像rickhg12hs说的那样使用greadlink -m ../my_silly_filename.txt