ディレクトリ

ディレクトリ #

ディレクトリを作成する #

ディレクトリの作成には 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)
}

play_circleRun open_in_newRun In The Playground

参考ドキュメント: os , os/exec

ディレクトリを削除する #

ディレクトリの削除は 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)
}

play_circleRun open_in_newRun In The Playground

参考ドキュメント: os , os/exec

中身があるディレクトリを削除する #

中身があるディレクトリの強制削除には 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)
}

play_circleRun open_in_newRun In The Playground

参考ドキュメント: os , os/exec

ディレクトリ内のファイル一覧を取得する #

ディレクトリのファイル一覧の取得には 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())
	}
}

play_circleRun open_in_newRun In The Playground

参考ドキュメント: os

指定のディレクトリ以下の全てのファイルに何らかの処理をする #

path/filepathfunc 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
}

play_circleRun open_in_newRun In The Playground

参考ドキュメント: io/fs , path/filepath