-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist.go
49 lines (47 loc) · 938 Bytes
/
list.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main
import (
"fmt"
"io"
"io/fs"
)
func list(fileName string, files []string, verbose bool, w io.Writer) error {
return doEach(fileName, files, func(name string, sc *ZipScanner) error {
if flagHash != nil {
reader, err := sc.Open()
if err != nil {
return err
}
h := flagHash()
io.Copy(h, reader)
reader.Close()
fmt.Fprintf(w, "%x ", h.Sum(nil))
}
if verbose {
if sc.FileInfo().IsDir() {
w.Write([]byte{'d'})
} else {
w.Write([]byte{'-'})
}
mode := sc.Mode()
bit := fs.FileMode(01000)
for _, c := range []byte("rwxrwxrwx") {
bit >>= 1
if (mode & bit) > 0 {
w.Write([]byte{c})
} else {
w.Write([]byte{'-'})
}
}
fmt.Fprintf(w, "%8d %s ",
sc.CompressedSize64,
sc.Modified.Format("2006/01/02 15:04"))
if sc.NonUTF8 {
fmt.Fprint(w, "A ")
} else {
fmt.Fprint(w, "U ")
}
}
fmt.Fprintln(w, name)
return nil
})
}