在Go中实现 *nix find实用程序

qmelpv7a  于 2023-05-04  发布在  Go
关注(0)|答案(1)|浏览(134)

我正在尝试构建一个linux实用程序,我想解析下面的命令。

go-find / -name "filename"

上面的假设是在给定的路径(/)中搜索给定的“文件名”。
但是代码无法解析标志,因为它在要解析的任何标志值之前遇到非标志参数。帮我弄明白。这是写的是标志包文档。
标志分析在第一个非标志参数(“-”是非标志参数)之前或结束符“--”之后停止。
我在想是否有其他可行的解决方法?

wn9m85ua

wn9m85ua1#

使用flag.FlagSet来解析没有'path'变量的标志,使用os.args来手动解析'path'变量:

type Flags struct {
    Path string
    Name string
}

func main() {
    args := os.Args
    if len(args) < 4 { // the program name is the first argument
        log.Fatal("not enough arguments")
    }

    var (
        fs = flag.NewFlagSet(args[0], flag.ExitOnError)
        f  Flags
    )
    fs.StringVar(&f.Name, "name", "", "file name")
    err := fs.Parse(args[2:]) // parse flags without the program name and the 'path' argument
    if err != nil {
        log.Fatal(err)
    }

    f.Path = args[1] // get 'path' argument

    fmt.Println(f)
    
    // search algorithm ...
}
{/ filename}

相关问题