読者です 読者をやめる 読者になる 読者になる

golangでコマンドラインツールを作る #7 ある拡張子のファイルを検索する

f:id:masato47744:20150816150451p:plain

その6の続き

project.pbxprojを探す

今はコマンドの引数でファイルを指定してる。でも、本当はproject.pbxprojって、xcodeprojの下にあるって決まってる。 なので、何も指定しなくても、コマンド実行ディレクトリ配下を再帰的に辿ってそれでパースして欲しい。 なので、golangでファイルを検索するやり方を調べる

再帰的にファイルを探す

早速よさそうなの見つけた。filepath.Walkでいけそう。

Go言語で指定したディレクトリ以下のディレクトリおよびファイルの一覧を取得する - taknb2nchのメモ

ルートパス指定するのに、カレントディレクトリどうやってとるんだろう。path.Base()でいいのかな? Getwd関数の方がそれっぽいかな。

とりあえず、こんな感じで隠しフォルダ以外を再帰的に探すようにできた。汚いけど。

   cur, err := os.Getwd()
    if err != nil {
        panic(err)
    }
    err = filepath.Walk(cur,
        func(path string, info os.FileInfo, err error) error {
            if info.IsDir() {
                if strings.HasPrefix(info.Name(), ".") {
                    return filepath.SkipDir
                }
                return nil
            }

            ext := filepath.Ext(path)
            if ext == ".pbxproj" {
                rel, err := filepath.Rel(cur, path)
                if err != nil {
                    panic(err)
                }
                proj = rel
            }
            return nil
        })

    if proj == "" {
        fmt.Println("Not found project.pbxproj file.")
        return
    }

あとは、Flagでpbxprojを指定できるようにしたい。

ここまでの感想

  • ファイル操作系は色々揃っててすごいやりやすい気がした

その8