Introduction
Introduction Statistics Contact Development Disclaimer Help
ltree - plstree - ps and ls displayed as a tree
git clone git://bitreich.org/plstree git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
---
ltree (2739B)
---
1 #!/usr/bin/awk -f
2
3 # list paths in a tree with some stat infos
4
5 # Use find(1) walk the entire tree and then call ls -ld with all the
6 # result (ls sort the list itself) with the paths displayed as a tree:
7 #
8 # drwxr-xr-x 2 josuah josuah 512 Feb 16 13:19 ├─ .ssh
9 # -rw-r--r-- 1 josuah josuah 870 Feb 9 02:24 │ └─…
10 # drwxr-xr-x 2 josuah josuah 1536 Feb 18 21:24 ├─ bin
11 # -rwxr-xr-x 1 josuah josuah 1351 Feb 18 22:30 │ ├─…
12 # -rwxr-xr-x 1 josuah josuah 565 Feb 17 19:53 │ ├─…
13 # -rwxr-xr-x 1 josuah josuah 5430 Feb 17 19:51 │ └─…
14 # -rwxr-xr-x 1 josuah josuah 468 Feb 17 19:55 ...
15
16 BEGIN {
17 LINE = "│ ";
18 NODE = "├─ ";
19 TAIL = "└─ ";
20 VOID = " ";
21
22 num = list(entries, ARGC == 1 ? "." : ARGV[1]);
23 tree(entries, num);
24
25 for (l = 1; l <= num; l++) {
26 for (i = 1; entries[l":"i] != ""; i++)
27 printf("%s", entries[l":"i]);
28 printf("%s\n", entries[l"name"]);
29 }
30 }
31
32 # Get a recursive list of all entries into entries[] with entries[i:j]
33 # holding the component j of the path i, and 0 has all the -l details,
34 # then return the number of entries in entries[].
35 #
36 # [ 1:[ 0:"-rw-r--r-- 1 root root 341 Mar 13 10:50",
37 # 1:"etc" ],
38 # 2:[ 0:"drwxr-xr-x 28 root root 4096 Mar 13 10:50",
39 # 1:"etc",
40 # 2:"sv" ],
41 # 3:[ 0:"drwxr-xr-x 2 root root 4096 Mar 13 10:50",
42 # 1:"etc",
43 # 2:"tor" ] ]
44 #
45 # Only the leaves are present, the intermediates components are LINE or
46 # NODE if just before a leave
47 #
48 # [ 1:[ 1:LINE, 2:LINE, 3:LINE, 4:LINE, 5:NODE, 6:"filename" ] ]
49
50 function list(entries, path)
51 {
52 cmd = "cd '" path "' && exec find ." …
53 " -name '*.git' -prune -o" …
54 " -name 'CVS' -prune -o" …
55 " -exec ls -ld {} +";
56
57 for (num = 0; cmd | getline; num++) {
58 sub(" \\.$", "", $0);
59 sub(" -> .*", "", $0);
60 infos = $0;
61 sub(" \\./.*", "", infos);
62 sub(".* \\./", "./", $0);
63
64 entries[num"path"] = $0;
65 count = split($0, path_v, "/");
66 for (i = 2; i < count; i++)
67 entries[num":"i] = LINE;
68
69 entries[num":"count] = NODE;
70 entries[num":"1] = infos " ";
71 entries[num"name"] = path_v[count];
72 }
73 close(cmd);
74
75 return num - 1;
76 }
77
78 # Transform entries into a tree by replacing some LINE by VOID when need…
79 # The tree is walked from the bottom to the top, and column by column
80 # toward the right until an empty column is met.
81
82 function tree(entries, num)
83 {
84 for (i = 2; !stop; i++) {
85 stop = tail = 1;
86 for (l = num; l > 0; l--) {
87 if (entries[l":"i] == LINE && tail) {
88 entries[l":"i] = VOID;
89 stop = 0;
90 } else if (entries[l":"i] == NODE && tail) {
91 entries[l":"i] = TAIL;
92 tail = stop = 0;
93 } else if (!entries[l":"i]) {
94 tail = 1;
95 }
96 }
97 }
98 }
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.