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