Команда tree

Иногда бывает надостаточно команды ls и хочется увидеть дерево папок, а так как в bash нет такой команды, то пришлось написать свой вариант. Сначала конечно поискал в интернете и нашел пару стандартных запросов, основанных на команде find. Они были громоздки и сложны в использовании. Каждый раз надо было копировать, вставлять и запускать ибо запомнить такое просто невозможно. Но ведь хотелось просто вызвать tree в любой папке и увидеть всю иерархию.

Ниже представлен переработанный код:

# tree.sh

# по умолчанию показывает только директории,
# а если ввести -f, то скрипт отобразит и файлы
if [ "$1" = "-f" ]; then
   PARAM1=""
else
   PARAM1="-type d"
fi

# все просто, основано на find, поиск из текущей
# директории, затем идет разбор каждой строки,
# каждая строка разбивается по слешу на части и 
# вместо каждой директории отображает 5-ть пробелов и |,
# а затем отображает имя файла
find . $PARAM1 -print 2>/dev/null | awk '!/\.$/ {
   for (i=1; i<NF; i++) {
      d = (i==1) ? 0:5;
      printf("%"d"s", "|");
   } 
   print "--- "&NF;
}' FS='/'

Код надо сохранить в какой-нибудь sh файл, скажем tree.sh. Теперь необходимо иметь возможность его легкость запустить из любой директории. Я просто создал папку tree в корневой директории пользователя, поместил туда скрипт и добавил alias в ~/.bash_profile:

alias tree='~/tree/tree.sh'

Теперь все. Для примера возьмем apache-tomcat-7.0.32, перейдем в какую-нибудь директорию и позапускаем скрипт. Вот результаты:

# переходим в директорию manager
cd apache-tomcat-7.0.32/webapps/manager

# запускаем
tree

|--- images
|--- META-INF
|--- WEB-INF
|    |--- jsp

# отображаем дополнительно файлы
tree -f

|--- images
|    |--- add.gif
|    |--- asf-logo.gif
|    |--- code.gif
|    |--- design.gif
|    |--- docs.gif
|    |--- fix.gif
|    |--- tomcat.gif
|    |--- update.gif
|    |--- void.gif
|--- index.jsp
|--- META-INF
|    |--- context.xml
|--- status.xsd
|--- WEB-INF
|    |--- jsp
|    |    |--- 401.jsp
|    |    |--- 403.jsp
|    |    |--- 404.jsp
|    |    |--- sessionDetail.jsp
|    |    |--- sessionsList.jsp
|    |--- web.xml
|--- xform.xsl