104 lines
4.1 KiB
Go
Executable File
104 lines
4.1 KiB
Go
Executable File
////////////////////////////////////////////////////////////////////////////////////////////////////////////// ZDR1P_GOLANG / SOF
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
package main
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IMPORTS
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"fmt"
|
|
"io"
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// MD5 / MD5SUM FILE
|
|
|
|
type FileSummer struct {
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// MD5 / MD5SUM FILE
|
|
|
|
func NewFileSummer() *FileSummer {
|
|
return &FileSummer{}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// MD5 / MD5SUM FILE
|
|
|
|
func (f FileSummer) SumFile(filepath string) (string, error) {
|
|
fileToSum, err := os.Open(filepath)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer fileToSum.Close()
|
|
hash := md5.New()
|
|
_, err = io.Copy(hash, fileToSum)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return fmt.Sprintf("%x", hash.Sum(nil)), nil
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////// PAD / STRING PADDING THE COUNTER WITH 8 ZEROS
|
|
|
|
func pad(n, x int64) string {
|
|
return fmt.Sprintf(fmt.Sprintf("%%0%dd", x), n)
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////// GLOBAL VARIABLES TO MAIN
|
|
|
|
var offset int64 ////////////////////////////////////////// OFFSET / FILE INDEX OF THE FILELIST SHOWN ON THE FAR LEFT PADDED IN 8
|
|
var ospathslash string ////////////////////// OSPATHSLASH / OS DEPENDANT VARIABLE - IF LINUX/MACOS THEN '/', IF WINDOWS THEN '\'
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// MAIN / MAIN LOOP
|
|
|
|
func main() {
|
|
var err error
|
|
err = filepath.Walk(".", func(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
|
|
}
|
|
if offset == 0 {
|
|
path = ""
|
|
if os.PathSeparator == '\\' {
|
|
ospathslash = "\\"
|
|
} else {
|
|
ospathslash = "/"
|
|
}
|
|
}
|
|
offset += 1
|
|
fullpath, err := filepath.Abs("./")
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
}
|
|
if !info.IsDir() {
|
|
md5summer := NewFileSummer()
|
|
md5sum, err := FileSummer.SumFile(*md5summer, path)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
}
|
|
fmt.Printf("\033[31m%s \033[90m!\033[31m %s\033[90m - \033[31m%s%s%s\033[0m\n", pad(offset, 8), md5sum, fullpath, ospathslash, path)
|
|
} else {
|
|
fmt.Printf("\033[90m%s \033[90m?\033[90m 00000000000000000000000000000000\033[90m - %s%s\033[0m\n", pad(offset, 8), fullpath, path)
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
fmt.Printf("error walking the path %v\n", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////// ZDR1P_GOLANG / EOF
|