66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"k8s.io/klog/v2"
|
|
)
|
|
|
|
func ReplaceInFile(filePath string, targetStr string, replaceStr string) error {
|
|
// 读取文件内容
|
|
content, err := ioutil.ReadFile(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// 判断是否需要替换
|
|
if !strings.Contains(string(content), targetStr) {
|
|
return nil
|
|
}
|
|
|
|
// 替换字符串并写回文件,保持原有 filemode
|
|
info, err := os.Stat(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
newContent := strings.ReplaceAll(string(content), targetStr, replaceStr)
|
|
err = ioutil.WriteFile(filePath, []byte(newContent), info.Mode())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
klog.Infof("Replaced in file: %s\n", filePath)
|
|
return nil
|
|
}
|
|
|
|
func ReplaceFiles(rootDir string, replacePairs map[string]string) error {
|
|
err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// 如果当前路径是目录,则继续遍历
|
|
if info.IsDir() {
|
|
return nil
|
|
}
|
|
// 处理文件
|
|
for targetStr, replaceStr := range replacePairs {
|
|
err = ReplaceInFile(path, targetStr, replaceStr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func Reverse[S ~[]E, E any](s S) {
|
|
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
|
|
s[i], s[j] = s[j], s[i]
|
|
}
|
|
}
|