我对rsync的创建路径有问题。
x := filepath.Join("home", "my_name", "need_folder", ".")
fmt.Println(x)
我得到"home/my_name/need_folder"
,但需要"home/my_name/need_folder/."
,如果没有concat,如何解决?在名称为“。”的linux文件夹中。并非不可能。
谢谢!
答案 0 :(得分:4)
您无法使用filepath.Join()
作为其文档说明:
加入通话以清除结果...
并且由于.
表示“当前”目录,因此它将被filepath.Clean()
删除:
它反复应用以下规则,直到无法进行进一步处理为止:
[...]
消除每个。路径名元素(当前目录)。
实际上,path/filepath
包根本无法做您想做的事,不支持此操作。
您需要手动使用字符串连接。为此使用filepath.Separator
会很安全:
x := filepath.Join("home", "my_name", "need_folder") +
string(filepath.Separator) + "."
fmt.Println(x)
输出(在Go Playground上尝试):
home/my_name/need_folder/.
答案 1 :(得分:0)
调用文件路径时,加入实际上有两个步骤
path
进行词法处理,并返回与您在步骤1中获得的path
相同的最短路径名。在步骤2中,如果您阅读源代码,则会调用Clean
函数,并且该函数将
消除每个。路径名元素(当前目录)。
您可以尝试:
x := filepath.Join("home", "my_name", "need_folder", ".", "." , ".")
fmt.Println(x)
您仍然会得到相同的结果。
如果建议您在这种情况下使用concat:)