hakk

software development, devops, and other drivel
Tree lined path

Golang Listing Directory Contents and Sorting by File Name

Listing the contents of a directory in go and sorting by filename.

To get the list of file we will use the ReadDir function from the os package.

To sort the files we will use the sort package to arrange the filenames alphabetically ascending or descending.

package main

import (
	"fmt"
	"io/fs"
	"log"
	"os"
	"sort"
)

func checkErr(err error) {
	if err != nil {
		log.Fatal(err)
	}
}

// this is the default sort order of golang ReadDir
func SortFileNameAscend(files []fs.DirEntry) {
	sort.Slice(files, func(i, j int) bool {
		return files[i].Name() < files[j].Name()
	})
}

func SortFileNameDescend(files []fs.DirEntry) {
	sort.Slice(files, func(i, j int) bool {
		return files[i].Name() > files[j].Name()
	})
}

func printFiles(files []fs.DirEntry) {
	for _, file := range files {
		fileInfo, err := file.Info()
		checkErr(err)
		fmt.Println(file.Name(), fileInfo.Size(), fileInfo.ModTime())
	}
}

func main() {
	files, err := os.ReadDir(".")
	if err != nil {
		log.Fatal(err)
	}

	//SortFileNameAscend(files)
	printFiles(files)

	fmt.Println("\n-----------------------------------\n")

	SortFileNameDescend(files)

	printFiles(files)
}