Rev 38 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 38 | Rev 43 | ||
---|---|---|---|
1 | //usr/bin/env go run $0 $@; exit $? |
1 | //usr/bin/env go run $0 $@; exit $? |
- | 2 | ||
- | 3 | // ============================================================================ |
|
- | 4 | // Create |
|
- | 5 | // name : Andre Rikkert de Koe date: Mar 2018 |
|
- | 6 | // descr : filefind |
|
- | 7 | // This is a demo of programming in the Elixir language. |
|
- | 8 | // Its part of a project to implement a program to create a directory |
|
- | 9 | // tree similar to the output of the Unix find program. |
|
- | 10 | // EUID : Any user who has read access to all the files being searched for. |
|
- | 11 | // run : interactive |
|
- | 12 | // |
|
- | 13 | // Changes |
|
- | 14 | // name : date: |
|
- | 15 | // descr : short description |
|
- | 16 | // |
|
- | 17 | // ============================================================================ |
|
- | 18 | ||
2 | package main |
19 | package main |
3 | 20 | ||
4 | import ( |
21 | import ( |
5 | "fmt" |
22 | "fmt" |
6 | "io/ioutil" |
23 | "io/ioutil" |
7 | "log" |
24 | "log" |
8 | "os" |
25 | "os" |
9 | ) |
26 | ) |
10 | 27 | ||
11 | // ============================================================================= |
28 | // ============================================================================= |
12 | // Functions |
29 | // Functions |
13 | // ============================================================================= |
30 | // ============================================================================= |
14 | 31 | ||
15 | func Usage(progname, mesg string) { |
32 | func Usage(progname, mesg string) { |
16 | log.Print("Usage: " + progname + " directory") |
33 | log.Print("Usage: " + progname + " directory") |
17 | log.Fatal(mesg) |
34 | log.Fatal(mesg) |
18 | } |
35 | } |
19 | 36 | ||
20 | func traverse(s string) { |
37 | func traverse(s string) { |
21 | curdir, err := os.Getwd() |
38 | curdir, err := os.Getwd() |
22 | if err := os.Chdir(s); err != nil { |
39 | if err := os.Chdir(s); err != nil { |
23 | log.Fatal(err) |
40 | log.Fatal(err) |
24 | } |
41 | } |
25 | if err != nil { |
42 | if err != nil { |
26 | log.Fatal(err) |
43 | log.Fatal(err) |
27 | } |
44 | } |
28 | curdir2, err := os.Getwd() |
45 | curdir2, err := os.Getwd() |
29 | files, err := ioutil.ReadDir(curdir2) |
46 | files, err := ioutil.ReadDir(curdir2) |
30 | if err != nil { |
47 | if err != nil { |
31 | log.Fatal(err) |
48 | log.Fatal(err) |
32 | } |
49 | } |
33 | for _, f := range files { |
50 | for _, f := range files { |
34 | fmt.Println (curdir2 + "/" + f.Name()) |
51 | fmt.Println (curdir2 + "/" + f.Name()) |
35 | //fmt.Println(f.Name()) |
52 | //fmt.Println(f.Name()) |
36 | fi, err := os.Stat(f.Name()) |
53 | fi, err := os.Stat(f.Name()) |
37 | if err != nil { |
54 | if err != nil { |
38 | log.Fatal(err) |
55 | log.Fatal(err) |
39 | } |
56 | } |
40 | mode := fi.Mode(); |
57 | mode := fi.Mode(); |
41 | if mode.IsDir() { |
58 | if mode.IsDir() { |
42 | traverse(fi.Name()) |
59 | traverse(fi.Name()) |
43 | } |
60 | } |
44 | } |
61 | } |
45 | os.Chdir(curdir) |
62 | os.Chdir(curdir) |
46 | } |
63 | } |
47 | 64 | ||
48 | func start_traverse(s string) { |
65 | func start_traverse(s string) { |
49 | fmt.Println(s) |
66 | fmt.Println(s) |
50 | traverse(s) |
67 | traverse(s) |
51 | } |
68 | } |
52 | 69 | ||
53 | // ============================================================================= |
70 | // ============================================================================= |
54 | // MAIN |
71 | // MAIN |
55 | // ============================================================================= |
72 | // ============================================================================= |
56 | 73 | ||
57 | func main() { |
74 | func main() { |
58 | progname := os.Args[0] |
75 | progname := os.Args[0] |
59 | if len(os.Args) == 2 { |
76 | if len(os.Args) == 2 { |
60 | directory := os.Args[1] |
77 | directory := os.Args[1] |
61 | fi, err := os.Stat(directory) |
78 | fi, err := os.Stat(directory) |
62 | if err != nil { |
79 | if err != nil { |
63 | _ = err // ugly hack to allow not using the err variable |
80 | _ = err // ugly hack to allow not using the err variable |
64 | Usage(progname, "ERROR: Not a directory : " + directory) |
81 | Usage(progname, "ERROR: Not a directory : " + directory) |
65 | } |
82 | } |
66 | if fi.IsDir() { |
83 | if fi.IsDir() { |
67 | start_traverse(directory) |
84 | start_traverse(directory) |
68 | } else { |
85 | } else { |
69 | Usage(progname, "ERROR: Not a directory : " + directory) |
86 | Usage(progname, "ERROR: Not a directory : " + directory) |
70 | } |
87 | } |
71 | } else { |
88 | } else { |
72 | Usage(progname, "ERROR: 1 argument expected") |
89 | Usage(progname, "ERROR: 1 argument expected") |
73 | } |
90 | } |
74 | } |
91 | } |