ディレクトリ #
ディレクトリを作成する #
ディレクトリの作成には os.Mkdir
を、再帰的な作成には os.MkdirAll
を使う。
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// ディレクトリの作成
err := os.Mkdir("dir1", 0755)
if err != nil {
panic(err)
}
// ディレクトリを再帰的に作成
err = os.MkdirAll("dir2/dir3", 0755)
if err != nil {
panic(err)
}
// dir1, dir2 の確認
out, err := exec.Command("ls", "-la").Output()
fmt.Println(string(out), err)
// dir3 の確認
out, err = exec.Command("ls", "-la", "dir2").Output()
fmt.Println(string(out), err)
}
ディレクトリを削除する #
ディレクトリの削除は os.Remove
で行う。ディレクトリ内にファイルがある場合は削除できない。
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// ディレクトリの作成
err := os.Mkdir("dir1", 0755)
if err != nil {
panic(err)
}
// ディレクトリを削除
err = os.Remove("dir1")
if err != nil {
panic(err)
}
// 削除の確認
out, err := exec.Command("ls", "-la").Output()
fmt.Println(string(out), err)
}
中身があるディレクトリを削除する #
中身があるディレクトリの強制削除には os.RemoveAll
を使う。
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// ディレクトリの作成
err := os.Mkdir("dir1", 0755)
if err != nil {
panic(err)
}
// ディレクトリの中にファイルを作成
_, err = os.Create("dir1/file1.txt")
if err != nil {
panic(err)
}
// ディレクトリを削除
err = os.RemoveAll("dir1")
if err != nil {
panic(err)
}
// 削除の確認
out, err := exec.Command("ls", "-la").Output()
fmt.Println(string(out), err)
}
ディレクトリ内のファイル一覧を取得する #
ディレクトリのファイル一覧の取得には os.ReadDir
を使う。
package main
import (
"fmt"
"os"
)
func main() {
// ファイル一覧の取得
files, err := os.ReadDir("/etc")
if err != nil {
panic(err)
}
for _, file := range files {
// ファイル名
fmt.Println(file.Name())
// ディレクトリかどうか
fmt.Println(file.IsDir())
}
}
参考ドキュメント: os
指定のディレクトリ以下の全てのファイルに何らかの処理をする #
path/filepath
の func Walk(root string, fn WalkFunc) error
を使うと、指定のディレクトリ以下の全てのファイルに対して任意の処理ができる。
package main
import (
"fmt"
"io/fs"
"path/filepath"
)
func main() {
err := filepath.Walk("/etc/", visit)
if err != nil {
fmt.Printf("error walking: %v\n", err)
return
}
}
func visit(path string, info fs.FileInfo, err error) error {
if err != nil {
fmt.Printf("prevent panic by handling failure accessing a path %q: %v\n", path, err)
return err
}
fmt.Printf("visited file or dir: %q\n", path)
return nil
}
参考ドキュメント: io/fs , path/filepath