1#!/bin/sh 2 3# The awk script used in this file was written by vgersh99 4 5if [ "$#" = "0" ]; then 6 DIR="." 7else 8 DIR=$* 9fi 10 11for _dir in $DIR; do 12if [ ! -d $_dir ]; then 13 echo "$_dir: No such directory" 14 continue 15fi 16 17echo $_dir | sed -E 's/\/+$//' 18find -s ${_dir}/ | awk ' 19BEGIN { 20 FS = "/"; 21 i = 0; 22} 23 24function fineprint(branches) 25{ 26 gsub(" "," ", branches); 27 gsub("[|]","& ", branches); 28 gsub("`","&-- ", branches); 29 gsub("[+]","|-- ", branches); 30 return branches; 31} 32 33function mktree(number,branches, tnumber) 34{ 35 36 if (number > NR) { 37 return number - 1; 38 } 39 40 tnumber = number; 41 42 while (array["shift", number] < array["shift", tnumber + 1]) { 43 tnumber = mktree(tnumber + 1, branches" "); 44 if (tnumber == NR) break; 45 } 46 47 if (array["shift", number] == array["shift", tnumber + 1]) { 48 array["slip", number] = branches"+"; 49 } 50 51 if ((array["shift", number] > array["shift", tnumber + 1]) \ 52 || tnumber == NR) { 53 array["slip", number] = branches"`"; 54 } 55 56 57 return tnumber; 58} 59 60{ 61 array["shift", NR] = NF; 62 array["name", NR] = $(NF); 63} 64 65END { 66 if (EXIT) 67 exit EXIT; 68 69 for (i = 1; i <= NR; i++) { 70 i = mktree(i, ""); 71 } 72 73 for (i = 1; i <= NR; i++) { 74 75 if (i > 1) { 76 lprev = length(array["slip", i - 1]); 77 lcurr = length(array["slip", i]); 78 if (lprev > lcurr - 1) 79 legacy = substr(array["slip", i - 1], 0, \ 80 lcurr - 1); 81 else 82 legacy = array["slip", i-1]; 83 tail = substr(array["slip", i], length(legacy) + 1 , \ 84 lcurr - length(legacy)); 85 gsub("[+]", "|", legacy); 86 gsub("`", " ", legacy); 87 array["slip", i] = (legacy)(tail); 88 } 89 90 printf "%s%s\n", fineprint(array["slip", i]), \ 91 array["name", i]; 92 93 } 94} 95' | grep -v '^|-- $' 96done 97 98