Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 319


Пример A-19. tree: Вывод дерева каталогов

#!/bin/sh # @(#) tree 1.1 30/11/95 by Jordi Sanfeliu # email: mikaku@fiwix.org # # Начальная версия: 1.0 30/11/95 # Следующая версия: 1.1 24/02/97 Now, with symbolic links # Исправления : Ian Kjos, поддержка недоступных каталогов # email: beth13@mail.utexas.edu # # Tree -- средство просмотра дерева каталогов (очевидно :-) ) #

# ==> Используется в данном документе с разрешения автора сценария, Jordi Sanfeliu. # ==> Комментарии, добавленные автором документа. # ==> Добавлено "окавычивание" аргументов.

search () { for dir in `echo *` # ==> `echo *` список всех файлов в текущем каталоге, без символов перевода строки. # ==> Тот же эффект дает for dir in * # ==> но "dir in `echo *`" не обрабатывет файлы, чьи имена содержат пробелы. do if [ -d "$dir" ] ; then # ==> Если это каталог (-d)... zz=0 # ==> Временная переменная, для сохранения уровня вложенности каталога. while [ $zz != $deep ] # Keep track of inner nested loop. do echo -n "| " # ==> Показать символ вертикальной связи, # ==> с 2 пробелами и без перевода строки. zz=`expr $zz + 1` # ==> Нарастить zz. done if [ -L "$dir" ] ; then # ==> Если символическая ссылка на каталог... echo "+---$dir" `ls -l $dir | sed 's/^.*'$dir' //'` # ==> Показать горизонтальный соединитель и имя связянного каталога, но... # ==> без указания даты/времени. else echo "+---$dir" # ==> Вывести горизонтальный соединитель... # ==> и название каталога. if cd "$dir" ; then # ==> Если можно войти в каталог... deep=`expr $deep + 1` # ==> Нарастить уровень вложенности. search # рекурсия ;-) numdirs=`expr $numdirs + 1` # ==> Нарастить счетчик каталогов. fi fi fi done cd .. # ==> Подняться на один уровень вверх. if [ "$deep" ] ; then # ==> Если depth = 0 (возвращает TRUE)... swfi=1 # ==> выставить признак окончания поиска. fi deep=`expr $deep - 1` # ==> Уменьшить уровень вложенности. }




Содержание  Назад  Вперед