Golang : Find file size(disk usage) with filepath.Walk
Need to determine which file is taking up all the disk space? Maybe this small Golang program can be useful to you. The purpose of this small Golang program is to find out how much space a file occupies in a given target directory.
package main
import (
"fmt"
"os"
)
// function to return the disk usage information
func diskUsage(currentPath string, info os.FileInfo) int64 {
size := info.Size()
if !info.IsDir() {
return size
}
dir, err := os.Open(currentPath)
if err != nil {
fmt.Println(err)
return size
}
defer dir.Close()
files, err := dir.Readdir(-1)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, file := range files {
if file.Name() == "." || file.Name() == ".." {
continue
}
size += diskUsage(currentPath+"/"+file.Name(), file)
}
fmt.Printf("Size in bytes : [%d] : [%s]\n", size, currentPath)
return size
}
func main() {
if len(os.Args) != 2 {
fmt.Printf("USAGE : %s <target_directory> \n", os.Args[0])
os.Exit(0)
}
dir := os.Args[1] // get the target directory
info, err := os.Lstat(dir)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
diskUsage(dir, info)
}
Sample output :
$ ./diskusage /Users/ | more
Size in bytes : [68] : [/Users//Shared/SC Info]
Size in bytes : [204] : [/Users//Shared]
Size in bytes : [139] : [/Users//sweetlogic/.atom/.apm]
Size in bytes : [402] : [/Users//sweetlogic/.atom/compile-cache/coffee]
Size in bytes : [895] : [/Users//sweetlogic/.atom/compile-cache/cson]
See also : Golang : Read directory content with filepath.Walk()
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+12.6k Golang : Extract part of string with regular expression
+8k Golang : Regular Expression find string example
+5.6k Gogland : Datasource explorer
+5.4k Javascript : Change page title to get viewer attention
+6.5k Golang : Test input string for unicode example
+4.4k Golang : Converting individual Jawi alphabet to Rumi(Romanized) alphabet example
+9.7k Golang : Changing a RGBA image number of channels with OpenCV
+9.2k Golang : What is the default port number for connecting to MySQL/MariaDB database ?
+10.2k Golang : Test a slice of integers for odd and even numbers
+63k Golang : Convert HTTP Response body to string
+6.4k Golang : Get Hokkien(福建话)/Min-nan(閩南語) Pronounciations
+6.9k Golang : Derive cryptographic key from passwords with Argon2