3.6 KiB
3.6 KiB
Дерево каталогов со ссылками
Напишем скрипт Bash для создания файла DIRECTORY-TREE.md
в корне репозитория со
ссылками на его объекты. Будем использовать полученный файл для навигации по репозиторию в вёб-интерфейсе.
1. Выполняем программу tree
и получаем дерево каталогов в текстовом виде, где для
каждогофайла указываем полный префикс пути Linux от корня репозитория. Папки выводим перед файлами и
применяем буквенно-цифровую сортировку. Исключаем файлы и папки, которых не должно быть в репозитории.
Полученное дерево помещаем в блок <pre>
и добавляем заголовок.
2. Для красоты, веточки-рамки у дерева box-drawing делаем короче. Для замены подстрок используем
программу sed
и регулярные выражения. Пробельные символы заменяем на пробелы. Пошагово
формируем файл DIRECTORY-TREE.md
.
3. Далее выполняем программу find
и получаем список файлов и каталогов Linux, сортируем
этот список в обратном порядке от самого длинного пути до самого короткого, т. е. вложенные файлы будут перед
их каталогами, чтобы не получилось заменить только часть пути. Затем обходим отсортированный список и заменяем
в полученном дереве относительный путь Linux на относительную ссылку HTTP в теге <a>
и именем
файла в представлении ссылки.
4. Получаем файл DIRECTORY-TREE.md
для вёб-интерфейса репозитория — Markdown преобразованный в HTML.
directory-tree.sh
#!/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/ / /g" -e "s/ / /g" -e "s/──/─/g" DIRECTORY-TREE.md
find . -mindepth 1 -type f,d -not -regex '.*\.\(gem\|lock\|zip\)\|.*/\(\.\|_site\).*' | 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