Advertisement
SvoTomCZ

IOS_proj1

Mar 29th, 2020
859
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. #
  2. # IOS 2019/2020: 1. Projekt
  3. # autor: Tomas Svoboda (xsvobo1v)
  4. # datum: 28. 3. 2020
  5. #
  6.  
  7. POSIXLY_CORRECT=yes
  8.  
  9. NORMALIZACE=0
  10. IGNOR=0
  11. # pracovni/aktualni adresar
  12. DIR=$(pwd)
  13. # pocet adresaru v adresarovem stromu
  14. ND=0
  15. # pocet vsech obycejnych souboru
  16. NF=0
  17. # napoveda k pouziti scriptu
  18. NAPOVEDA="Pouziti: ./diagraph [-i FILE_ERE] [-n] [DIR]
  19. -i ignoruje zadany FILE_ERE, nesmi se schodovat s korenovym adresarem DIR
  20. -n nastavi normalizaci
  21. DIR je umisteni prohledavaneho adresare, pri nezadani se prohledava aktualni."
  22.  
  23. # Histogram velikosti souboru
  24. declare -A FSHIST
  25. FSHIST['<100B']=0
  26. FSHIST['<1KiB']=0
  27. FSHIST['<10KiB']=0
  28. FSHIST['<100KiB']=0
  29. FSHIST['<1MiB']=0
  30. FSHIST['<10MiB']=0
  31. FSHIST['<100MiB']=0
  32. FSHIST['<1GiB']=0
  33. FSHIST['>=1GiB']=0
  34.  
  35.  
  36. # univerzalni chybova hlaska s napovedou k spravnemu vyuziti scriptu
  37. function napoveda {
  38. echo "$NAPOVEDA" >&2
  39. exit 1
  40. }
  41.  
  42. # vytiskne mrizky podle poctu souboru dane velikosti
  43. function mrizky
  44. {
  45. if [ "$1" -ne 0 ]; then
  46. eval printf '\#%.0s' {1.."$1"}
  47. fi
  48. }
  49.  
  50. # Nastaveni prepinacu
  51. while getopts ni: o
  52. do case "$o" in
  53. n) NORMALIZACE=1
  54. ;;
  55. i) IGNOR="$OPTARG"
  56. ;;
  57. *) >&2 echo "ERROR: Je zadaný chybny prepinac, postupujete podle napovedy:"
  58. napoveda;;
  59. esac
  60. done
  61.  
  62. # posun cesty na dalsi argument
  63. ((OPTIND--))
  64. shift $OPTIND
  65.  
  66. # Nastaveni prohledavaneho adresare kdyz je zadan pouze [DIR]
  67. if [ $# -eq 1 ]; then
  68. DIR="$1"
  69. fi
  70.  
  71. # Pokud je zadano moc argumentu
  72. if [ $# -gt 3 ]; then
  73. >&2 echo "ERROR: Prilis mnoho argumentu!"
  74. napoveda
  75. fi
  76.  
  77. # Pokud je FILE_ERE korenovy adresar
  78. if [[ "$DIR" =~ $IGNOR ]]; then
  79. >&2 echo "ERROR: FILE_ERE se shoduje s prohledavanym adresarem DIR"
  80. napoveda
  81. exit 1
  82. fi
  83.  
  84. # Cyklus prochazejici vsechny soubory pod zadanym adresarem
  85. while read soubor
  86. do
  87. if [[ "$soubor" =~ $IGNOR ]]; then
  88. continue
  89. fi
  90. # pokud je prohledavany soubor adresar, tak zvysi pocet ND
  91. if [ -d "$soubor" ]; then
  92. (( ND++ ))
  93. # nebo pokud je prohledavany soubor obycejny soubor, tak zvysi pocet NF
  94. elif [ -f "$soubor" ]; then
  95. (( NF++ ))
  96.  
  97. # urci velikost souboru
  98. velikost=$(wc -c < "$soubor" | xargs)
  99. if [ "$velikost" -lt 100 ]; then
  100. (( FSHIST["<100B"]++ ))
  101. elif [ "$velikost" -lt 1024 ]; then
  102. (( FSHIST["<1KiB"]++ ))
  103. elif [ "$velikost" -lt 10240 ]; then
  104. (( FSHIST["<10KiB"]++ ))
  105. elif [ "$velikost" -lt 102400 ]; then
  106. (( FSHIST["<100KiB"]++ ))
  107. elif [ "$velikost" -lt 1048576 ]; then
  108. (( FSHIST["<1MiB"]++ ))
  109. elif [ "$velikost" -lt 10485760 ]; then
  110. (( FSHIST["<10MiB"]++ ))
  111. elif [ "$velikost" -lt 10485760 ]; then
  112. (( FSHIST["<100MiB"]++ ))
  113. elif [ "$velikost" -lt 1073741824 ]; then
  114. (( FSHIST["<1GiB"]++ ))
  115. elif [ "$velikost" -ge 1073741824 ]; then
  116. (( FSHIST[">=1GiB"]++ ))
  117. fi
  118.  
  119. fi
  120.  
  121. done <<< $(find "$DIR" -type f -or -type d 2> /dev/null)
  122.  
  123.  
  124. if [ "$NORMALIZACE" -eq 1 ]; then
  125. # 79 je maximalni delka radku pokud vystup skriptu neni v terminalu
  126. delka_radku=79
  127. # ziska delku radku pokud se vystup 1 nachazi na terminalu
  128. if [ -t 1 ]; then
  129. delka_radku=$(tput cols)
  130. (( delka_radku-- ))
  131. fi
  132.  
  133. # ziska nejvetsi hodnotu v poli FSHIST
  134. max_hodnota=0
  135. for i in "${FSHIST[@]}"
  136. do
  137. if [ $i -gt $max_hodnota ]; then
  138. max_hodnota=$i
  139. fi
  140. done
  141.  
  142. echo "$delka_radku" ############## debub vypis
  143. echo "$max_hodnota" ############## debub vypis
  144.  
  145. if [ "$max_hodnota" -gt "$delka_radku" ]; then
  146. for j in "${!FSHIST[@]}"
  147. do
  148. ${FSHIST[$j]}=$(( ${FSHIST[$j]} * delka_radku / max_hodnota ))
  149. done
  150. fi
  151.  
  152. fi
  153.  
  154. echo "Root directory: $DIR"
  155. echo "Directories: $ND"
  156. echo "All files: $NF"
  157.  
  158. echo "File size histogram:"
  159. printf " <100 B : " ; mrizky "${FSHIST['<100B']}"
  160. printf "\n"
  161. printf " <1 KiB : " ; mrizky "${FSHIST['<1KiB']}"
  162. printf "\n"
  163. printf " <10 KiB : " ; mrizky "${FSHIST['<10KiB']}"
  164. printf "\n"
  165. printf " <100 KiB: " ; mrizky "${FSHIST['<100KiB']}"
  166. printf "\n"
  167. printf " <1 MiB : " ; mrizky "${FSHIST['<1MiB']}"
  168. printf "\n"
  169. printf " <10 MiB : " ; mrizky "${FSHIST['<10MiB']}"
  170. printf "\n"
  171. printf " <100 MiB: " ; mrizky "${FSHIST['<100MiB']}"
  172. printf "\n"
  173. printf " <1 GiB : " ; mrizky "${FSHIST['<1GiB']}"
  174. printf "\n"
  175. printf " >=1 GiB : " ; mrizky "${FSHIST['>=1GiB']}"
  176. printf "\n"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement