86 lines
1.3 KiB
Go
86 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func isDevice(path string) bool {
|
|
info, err := os.Lstat(path)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return false
|
|
}
|
|
return info.Mode()&os.ModeDevice != 0
|
|
}
|
|
|
|
func isPipe(path string) bool {
|
|
info, err := os.Lstat(path)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return false
|
|
}
|
|
return info.Mode()&os.ModeNamedPipe != 0
|
|
}
|
|
|
|
func isSocket(path string) bool {
|
|
info, err := os.Lstat(path)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return false
|
|
}
|
|
return info.Mode()&os.ModeSocket != 0
|
|
}
|
|
|
|
func isSymlink(path string) bool {
|
|
info, err := os.Lstat(path)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return false
|
|
}
|
|
return info.Mode()&os.ModeSymlink != 0
|
|
}
|
|
|
|
func isSpecialFS(path string) bool {
|
|
if strings.Split(path, "/")[1] == "proc" {
|
|
return true
|
|
}
|
|
if strings.Split(path, "/")[1] == "sys" {
|
|
return true
|
|
}
|
|
if strings.Split(path, "/")[1] == "dev" {
|
|
return true
|
|
}
|
|
if strings.Split(path, "/")[1] == "run" {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func isSubfolder(path1 string, path2 string) bool {
|
|
path1 = filepath.Clean(path1)
|
|
path2 = filepath.Clean(path2)
|
|
return strings.HasPrefix(path2, path1)
|
|
}
|
|
|
|
func exclude(s string) bool {
|
|
if isSymlink(s) {
|
|
return true
|
|
}
|
|
if isPipe(s) {
|
|
return true
|
|
}
|
|
if isSocket(s) {
|
|
return true
|
|
}
|
|
if isDevice(s) {
|
|
return true
|
|
}
|
|
if isSpecialFS(s) {
|
|
return true
|
|
}
|
|
return false
|
|
}
|