golangでコマンドラインツールを作る #7 ある拡張子のファイルを検索する
その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を指定できるようにしたい。
ここまでの感想
- ファイル操作系は色々揃っててすごいやりやすい気がした