Команда Linux для вывода структуры каталогов в виде дерева

Рейтинг: 0Ответов: 1Опубликовано: 21.07.2023

Есть ли какая-либо команда Linux, которую я могу вызвать из скрипта Bash, который напечатает структуру каталогов в виде дерева, например:

dir1
  aa.txt
  bb.txt
dir2
  dir3
...

Ответы

▲ 2Принят

Скрипт Bash с использованием программы tree для создания файла Markdown в корне репозитория со ссылками на его объекты. Полученный файл удобно использовать для навигации по репозиторию в вёб-интерфейсе.

#!/bin/bash
echo "Построение дерева каталогов со ссылками."
{
  echo "## Дерево каталогов"
  echo
  echo "<pre>"
  tree -nvf --dirsfirst -I "*.gem|*.lock|*.zip|_site*" --noreport
  echo "</pre>"
} >DIRECTORY-TREE.md
sed -i -e "s/\xC2\xA0/ /g" -e "s/   /  /g" -e "s/──/─/g" DIRECTORY-TREE.md
find . -mindepth 1 -type f,d | sort -r | while read -r file; do
  echo "Обработка: \\$file >> ${file#*/} >> ${file##*/}"
  sed -i "s|\\$file|<a href='${file#*/}'>${file##*/}<\/a>|g" DIRECTORY-TREE.md
done

Скриншот Описание алгоритма
Дерево каталогов 1 1. Выполняем программу tree и получаем дерево каталогов в текстовом виде, где для каждого файла указываем полный префикс пути Linux от корня репозитория. Папки выводим перед файлами и применяем буквенно-цифровую сортировку. Исключаем файлы и папки, которых не должно быть в репозитории. Полученное дерево помещаем в блок <pre> и добавляем заголовок.
Дерево каталогов 2 2. Для красоты, веточки-рамки у дерева box-drawing делаем короче. Для замены подстрок используем программу sed и регулярные выражения. Неразрывные пробелы U+00A0 заменяем на обычные пробелы. Пошагово формируем файл DIRECTORY-TREE.md.
Дерево каталогов 3 3. Далее выполняем программу find и получаем список файлов и каталогов Linux, сортируем этот список в обратном порядке от самого длинного пути до самого короткого, т. е. вложенные файлы будут перед их каталогами, чтобы не получилось заменить только часть пути. Затем обходим отсортированный список и заменяем в полученном дереве относительный путь Linux на относительную ссылку HTTP в теге <a> и именем файла в представлении ссылки.
Дерево каталогов 4 4. Получаем файл DIRECTORY-TREE.md для вёб-интерфейса репозитория — Markdown преобразованный в HTML.