Иногда бывает надостаточно команды 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