我正在寻找一种方法来规范化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(example 1,example 2上看到的绝对路径或规范化路径的所有问题都假设路径指向真实文件并使用realpath
或pwd
来将其标准化,但这对我的用例不起作用。
换句话说,我正在寻找一个纯粹将路径作为字符串操作的bash函数,而不是实际查看文件系统,类似于Java中的File.getCanonicalPath。
答案 0 :(得分:4)
Readlink是您要走的路,或者是您的greadlink。它位于GNU核心实用程序包中。 " brew install coreutils" (如果你使用家酿)。然后像rickhg12hs一样使用greadlink -m ../my_silly_filename.txt。