diff --git a/Makefile b/Makefile index 2a02690..095ccf9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ BUILD_ENV := CGO_ENABLED=0 APP=wechatmp2markdown -VERSION=v1.1.9 +VERSION=v1.1.10 # linux or mac 环境编译 # make [cmd] diff --git a/README.md b/README.md index 06f6de6..d512c20 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,11 @@ markdown和图片文件将保存在 `D:\wechatmp_bak\gitcode操你妈\` 下 > "*" -> "⁎" > ``` -> 在linux环境下,使用CLI模式,需要为程序赋予可执行与写权限,例如:` chmod +xw wechatmp2markdown-v1.1.9_linux_amd64` +> 在linux环境下,使用CLI模式,需要为程序赋予可执行与写权限,例如:` chmod +xw wechatmp2markdown-v1.1.10_linux_amd64`; +> 以及,文件或路径名不能包含以下任何字符:/(正斜杠),当标题包含以上字符时,本程序将用相似的Unicode字符进行替换,具体替换规则为: +> ``` +> "/" -> "∕" +> ``` ### web server 模式 通过web服务使用 @@ -105,7 +109,7 @@ markdown和图片文件将保存在 `D:\wechatmp_bak\gitcode操你妈\` 下 浏览器访问:`localhost:8964?url=https://mp.weixin.qq.com/s/a=1&b=2&image=save`, 将返回一个zip文件 -> 在linux环境下,使用web server模式,需要为程序赋予可执行权限,例如:` chmod +x wechatmp2markdown-v1.1.9_linux_amd64` +> 在linux环境下,使用web server模式,需要为程序赋予可执行权限,例如:` chmod +x wechatmp2markdown-v1.1.10_linux_amd64` ## 开发 go 1.20 diff --git a/format/format.go b/format/format.go index 1e48882..1dec256 100644 --- a/format/format.go +++ b/format/format.go @@ -57,12 +57,26 @@ func legalizationFilenameForWindows(name string) string { return name } +// linux下, 文件名包含非法字符时, 用相似的Unicode字符进行替换 +func legalizationFilenameForLinux(name string) string { + // Linux文件名不能包含这些字符 + invalidChars := regexp.MustCompile(`[\/]`) + + // 如果包含非法字符,则替换 + if invalidChars.MatchString(name) { + name = strings.ReplaceAll(name, "/", "∕") + } + + return name +} + // FormatAndSave fomat article and save to local file func FormatAndSave(article parse.Article, filePath string) error { // basrPath := filepath.Join(filePath, ) var basePath string var fileName string var isWin bool = runtime.GOOS == "windows" + var isLinux bool = runtime.GOOS == "linux" var separator string if isWin { separator = "\\" @@ -84,6 +98,8 @@ func FormatAndSave(article parse.Article, filePath string) error { title := strings.TrimSpace(article.Title.Val.(string)) if isWin { title = legalizationFilenameForWindows(title) + } else if isLinux { + title = legalizationFilenameForLinux(title) } // title := "thisistitle" basePath = filepath.Join(filePath, title)