【发布时间】:2017-04-03 15:56:55
【问题描述】:
如何获取文件的父目录?
我希望它在所有类型的名称上都是安全的:
.
..
path/to/my/file
/absolute/path/to/my/file
'-rf --no-preserve-root whatever'/test.zip
(symbolic links)
`'"`'{(})
我更感兴趣的是获取文件系统上的规范位置,而不是遍历文件名中声明的路径。
请注意,这里有类似的问题,但没有一个关注正确性、相对/绝对路径和“不安全”名称:
[1]bash get the parent directory of current directory
【问题讨论】:
-
您是在查找包含文件的目录的完整路径名,还是包含该文件的目录的父目录?您是否对遍历文件名中所述的路径或获取文件系统上的规范位置更感兴趣?
-
两个问题的第二种情况。
-
假设您的当前目录是
/home/user/bin,“文件名”是..(父当前目录)。据推测,包含该条目的目录是/home/user/bin,因此父目录是/home/user,或者是否需要一些其他解释(目录..是/home/user,所以父目录可能是/home)。我认为“假定”变体是正确的,与.类似,但也许也可以检查一下。 -
-rf…/test.zip名称的认可解释是什么?那是一个包含空格、破折号等的目录名称吗?另外,如果文件名不存在怎么办?这是一个错误,还是代码应该对文件名进行文本分析以尝试推断如果文件存在,文件名是什么? -
@JonathanLeffler 至于“如果文件不存在怎么办” - 老实说,我不知道。 SO 问题往往会超出原作者的意图,至少对于有价值的问题是这样。所以我的解释和你的可能会有所不同。我个人知道存在一个文件,这些情况对我来说是无法区分的。