這是問題所在。我有一個符號鏈接指向其他目錄:在一條路徑中解析符號鏈接和「..」
$ls -l /foo/bar
lrwxrwxrwx /foo/bar -> /target/bar
在foo
目錄下有一個文件x
$ls -l /foo
lrwxrwxrwx me me 314 x
現在,我想有以下路徑來x
訪問/foo/bar/../x
$ls -l /foo/bar/../x : No such file or directory
這在Bash中不起作用,但有沒有什麼辦法可以使它從Java使用File api?目錄結構可以是幾乎任意的,有可能會像/foo/bar/1/2/3/4/5/../../../../../../x
案件等
在我尋找magic()
方法檢查文件(假設前面提到的目錄結構)中存在的內容。換句話說:
magic("/foo/x") ... true
magic("/foo/bar/../x") ... true
magic("/foo/bar/1//../../x") ... true
magic("/foo/bar/1/2/3/4/5/../../../../../../x") ... true
magic("/foo/bar//1/../2/../../x") ... true
magic("/foo/bar/1/2/../3/../../../x") ... true
magic("/foo/bar/1/2/./../3/../4//../../../x") ... true
magic("/foo/bar/x") ... false
magic("/foo/bar/1/../x") ... false
magic("/foo/bar/1/2/3/4/../../../../../../x") ... false
magic("/foo/bar//1/../2/../x") ... false
注1: getCanonicalPath()不爲我工作,因爲它首先解決了符號鏈接,然後所有的「..」或「」在路徑中。反之亦然,我需要它。
注2:有可能我在路徑中的其他符號鏈接,它應該工作在相同的意義(目錄2
可能是一個符號鏈接)。
注3:文件x
僅位於在/foo
。
到目前爲止,它看起來像我需要一個上下文無關語法的解析器,是不是有更容易解決這個問題的解決方案?
這是Linux如何解析路徑的工件。這不是Bash或Java這樣做。 – 2013-03-05 20:50:18
你想做什麼?如果你想做什麼是可能的,訪問文件系統路徑將是完全不明確的。 – Falmarri 2013-03-05 20:51:40
@Falmarri:我只需要它:)使用整個圖片很難解釋它,這就是爲什麼我在這裏只提取問題的本質。 – 2013-03-05 20:53:47