Advertisement
anticlown

Lab_5(linux bash, recursive search)

Nov 15th, 2023 (edited)
888
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.62 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3.  # Проверка правильности ввода из командной строки
  4.  checkIsCorrectInput() {
  5.     if [ $1 -ne 3 ]; then
  6.         echo "Введено неверное количество аргументов!"
  7.         echo "Формат ввода: $0 <каталог> <глубина вложенности> <файл вывода>"
  8.         echo "Глубина вложенности: 1 - файлы начального каталога, 2 - файлы подкаталогов и т.д."
  9.         echo "Повторите запуск программы!"
  10.         exit 1
  11.     fi
  12.  }
  13.  
  14. # Процедура для вывода текста условия
  15. printProblemStatement() {
  16.     echo -e "\nДанная программа обходит заданный каталог и его подкаталоги до заданной глубины,\n\t затем выводит общее число каталогов на консоль, а подробный отчет в указанный файл"
  17. }
  18.  
  19. # Процедура вывода результатов поиска
  20. printSearchResults() {
  21.     echo -e "\nОбщее количество папок: $countAllDirs"
  22. }
  23.  
  24. # Функция для рекурсивного поиска каталогов в каталоге
  25. searchInDirectory() {
  26.     local dirFiles="$1"
  27.     local depth="$2"
  28.     local innerDirCount=0
  29.     local innerFileCount=0
  30.    
  31.     for file in $dirFiles/*
  32.     do
  33.         if [ -d "$file" ]; then
  34.             echo -e "----------------------------------------------------------------------------------" >> $outputFile
  35.             echo -e "\n$file\n" >> $outputFile
  36.            
  37.             local nextDepth=$(($depth - 1))
  38.             if [ $depth -ge 1 ]; then
  39.                 searchInDirectory $file $nextDepth 
  40.             fi
  41.            
  42.             let "countAllDirs=countAllDirs + 1"
  43.             let "innerDirCount=innerDirCount + 1"
  44.         fi
  45.         if [ -f "$file" ]; then
  46.             let "innerFileCount=innerFileCount + 1"
  47.         fi
  48.     done
  49.     echo -e "\tКоличество вложенных каталогов в каталог $dirFiles: $innerDirCount" >> $outputFile
  50.     echo -e "\tКоличество вложенных файлов в каталог $dirFiles: $innerFileCount" >> $outputFile
  51.     echo -e "----------------------------------------------------------------------------------\n" >> $outputFile
  52. }
  53.  
  54.                                             #########################################
  55.                                             #       Начало выполнения программы    #
  56.                                             #########################################
  57. checkIsCorrectInput $#
  58. > $3 #очищаем файл перед записью
  59.  
  60. countAllDirs=0
  61. outputFile=$3
  62. startDepth=$2
  63.  
  64. printProblemStatement
  65. searchInDirectory $1 $2
  66. printSearchResults
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement