75 lines
3.6 KiB
Bash
75 lines
3.6 KiB
Bash
# Дерево каталогов со ссылками
|
||
|
||
Напишем скрипт Bash для создания файла [`DIRECTORY-TREE.md`](../DIRECTORY-TREE.md) в корне репозитория со
|
||
ссылками на его объекты. Будем использовать полученный файл для навигации по репозиторию в вёб-интерфейсе.
|
||
|
||
<details>
|
||
<summary>
|
||
<b>1.</b> Выполняем программу <code>tree</code> и получаем дерево каталогов в текстовом виде, где для
|
||
каждогофайла указываем полный префикс пути Linux от корня репозитория. Папки выводим перед файлами и
|
||
применяем буквенно-цифровую сортировку. Исключаем файлы и папки, которых не должно быть в репозитории.
|
||
Полученное дерево помещаем в блок <code><pre></code> и добавляем заголовок.
|
||
</summary>
|
||
|
||

|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>
|
||
<b>2.</b> Для красоты, веточки-рамки у дерева box-drawing делаем короче. Для замены подстрок используем
|
||
программу <code>sed</code> и регулярные выражения. Пробельные символы заменяем на пробелы. Пошагово
|
||
формируем файл <code>DIRECTORY-TREE.md</code>.
|
||
</summary>
|
||
|
||

|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>
|
||
<b>3.</b> Далее выполняем программу <code>find</code> и получаем список файлов и каталогов Linux, сортируем
|
||
этот список в обратном порядке от самого длинного пути до самого короткого, т. е. вложенные файлы будут перед
|
||
их каталогами, чтобы не получилось заменить только часть пути. Затем обходим отсортированный список и заменяем
|
||
в полученном дереве относительный путь Linux на относительную ссылку HTTP в теге <code><a></code> и именем
|
||
файла в представлении ссылки.
|
||
</summary>
|
||
|
||

|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>
|
||
<b>4.</b> Получаем файл <code>DIRECTORY-TREE.md</code> для вёб-интерфейса репозитория — Markdown преобразованный в HTML.
|
||
</summary>
|
||
|
||

|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
<details open>
|
||
<summary><h3 id="directory-tree.sh">directory-tree.sh</h3></summary>
|
||
|
||
```bash
|
||
#!/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
|
||
```
|
||
|
||
</details>
|
||
|
||
---
|