/
basename.go
63 lines (53 loc) · 1.31 KB
/
basename.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"strings"
)
func runBasename(args []string) error {
fset := flag.NewFlagSet("basename", flag.ContinueOnError)
fset.Usage = func() {
fmt.Fprint(os.Stderr, `Usage: dirname NAME [SUFFIX]\n or: mo dirname OPTION... NAME...
Print NAME with any leading directory components removed.
If specified, also remove a trailing SUFFIX.
Options:
`)
fset.PrintDefaults()
fmt.Fprintln(os.Stderr, `
Examples:
basename /usr/bin/sort -> "sort"
basename include/stdio.h .h -> "stdio"
basename -s .h include/stdio.h -> "stdio"
basename -a any/str1 any/str2 -> "str1" followed by "str2"`)
os.Exit(1)
}
a := fset.Bool("a", false, "support multiple arguments and treat each as a NAME")
s := fset.String("s", "", "remove a trailing SUFFIX; implies -a")
if err := fset.Parse(args); err != nil {
return err
}
if fset.NArg() < 1 {
fset.Usage()
return nil
}
if *s != "" {
for _, d := range fset.Args() {
fmt.Println(strings.TrimSuffix(filepath.Base(d), *s))
}
return nil
}
if *a {
for _, d := range fset.Args() {
fmt.Println(filepath.Base(d))
}
return nil
}
if fset.NArg() == 2 {
fmt.Println(strings.TrimSuffix(filepath.Base(fset.Arg(0)), fset.Arg(1)))
} else {
fmt.Println(filepath.Base(fset.Arg(0)))
}
return nil
}