2025-01-31
This commit is contained in:
parent
991fcdda6d
commit
83322ef967
8 changed files with 55 additions and 64 deletions
|
@ -1,4 +1,4 @@
|
|||
© Головин Г.Г., 2021-2024
|
||||
© Головин Г.Г., 2021-2025
|
||||
|
||||
Опубликовано под [Открытой лицензией 1.1](OPEN_LICENSE.txt)
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
|||
|
||||
---
|
||||
|
||||
© Golovin G.G., translation from Russian, 2021-2024
|
||||
© Golovin G.G., translation from Russian, 2021-2025
|
||||
|
||||
Published under the [Open License 1.1](OPEN_LICENSE.txt)
|
||||
|
||||
|
|
13
WIKI.md
13
WIKI.md
|
@ -1,7 +1,5 @@
|
|||
<hr>
|
||||
|
||||
<details open>
|
||||
<summary><h3>Оглавление</h3></summary>
|
||||
<summary><b>Оглавление / Contents</b></summary>
|
||||
|
||||
<hr>
|
||||
|
||||
|
@ -11,13 +9,6 @@
|
|||
- [График функции в консоли](https://pomodoro5.mircloud.ru/ru/2023/02/05/function-graph-in-console.html) — 05.02.2023.
|
||||
- [Рисуем простую капчу](https://pomodoro5.mircloud.ru/ru/2023/01/03/drawing-simple-captcha.html) — 03.01.2023.
|
||||
|
||||
</details>
|
||||
|
||||
<hr>
|
||||
|
||||
<details open>
|
||||
<summary><h3>Contents</h3></summary>
|
||||
|
||||
<hr>
|
||||
|
||||
- [Directory tree with links](https://pomodoro5.mircloud.ru/en/2023/08/04/directory-tree.html) — 04.08.2023.
|
||||
|
@ -27,5 +18,3 @@
|
|||
- [Drawing simple captcha](https://pomodoro5.mircloud.ru/en/2023/01/04/drawing-simple-captcha.html) — 04.01.2023.
|
||||
|
||||
</details>
|
||||
|
||||
<hr>
|
||||
|
|
|
@ -7,9 +7,9 @@ url: "https://pomodoro5.mircloud.ru"
|
|||
# подпапка этой сборки для относительных URL-ов
|
||||
baseurl: "/color"
|
||||
# ссылка в верхнем левом углу заглавных страниц
|
||||
homepage_url: "https://gitea.com/pomodoro/5"
|
||||
homepage_url: "https://codeberg.org/pomodoro/5"
|
||||
# представление ссылки
|
||||
homepage_name: "GITEA"
|
||||
homepage_name: "CODEBERG"
|
||||
# подпапка альтернативной сборки
|
||||
older_tomato_baseurl: ""
|
||||
# часовой пояс для формата даты ISO-8601
|
||||
|
|
|
@ -7,9 +7,9 @@ url: "https://pomodoro5.mircloud.ru"
|
|||
# подпапка этой сборки для относительных URL-ов
|
||||
baseurl: ""
|
||||
# ссылка в верхнем левом углу заглавных страниц
|
||||
homepage_url: "https://gitea.com/pomodoro/5"
|
||||
homepage_url: "https://codeberg.org/pomodoro/5"
|
||||
# представление ссылки
|
||||
homepage_name: "GITEA"
|
||||
homepage_name: "CODEBERG"
|
||||
# подпапка альтернативной сборки
|
||||
color_tomato_baseurl: "/color"
|
||||
# часовой пояс для формата даты ISO-8601
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Directory tree with links
|
||||
description: We write a Bash script for building a directory tree for a repository in the Markdown file. We use only Bash tools and basic Linux software without additional.
|
||||
description: We write a Bash script for building a directory tree for a repository in the Markdown file. We use only Bash builtin tools and basic Linux software without...
|
||||
sections: [Recursion,File processing,Web-navigation]
|
||||
tags: [linux,bash,markdown,html,structure,folders,files,references,sorting]
|
||||
canonical_url: /en/2023/08/04/directory-tree.html
|
||||
|
@ -10,11 +10,11 @@ date: 2023.08.04
|
|||
lang: en
|
||||
---
|
||||
|
||||
We write a Bash script for building a directory tree for a repository in
|
||||
the Markdown file. We use only Bash tools and basic Linux software — `ls`,
|
||||
`sed`, `tr` and `echo` — without additional programs. The obtained file
|
||||
We write a Bash script for building a directory tree for a repository in the
|
||||
Markdown file. We use only Bash builtin tools and basic Linux software — `ls`,
|
||||
`sed`, `tr` and `printf` — without additional programs. The obtained file
|
||||
[`DIRECTORY_TREE.md`]({{ site.homepage_url }} "{{ site.homepage_name }}")
|
||||
will be used in the web interface to navigate through the objects of the repository.
|
||||
is useful in the web-interface to navigate through the objects of the repository.
|
||||
|
||||
We create a recursive function and use it to bypass all files and directories of the repository,
|
||||
excluding the list from `.gitignore` — we build a directory structure in the form of a tree. We
|
||||
|
@ -24,31 +24,32 @@ concise Markdown file with links.
|
|||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# sorted list of files and directories
|
||||
function list_directory_contents {
|
||||
# first uppercase letters, then lowercase, first directories, then files
|
||||
eval "LC_COLLATE=C ls -A --group-directories-first $exclusions $1"
|
||||
}
|
||||
# directory tree with links
|
||||
function directory_tree {
|
||||
# arguments
|
||||
local path="$1"
|
||||
local head="$2"
|
||||
local tail="$3"
|
||||
# prefix for current element
|
||||
[ "one" == "$4" ] && printf '%s' "/" || printf '\n%s' "$head"
|
||||
# current element of the tree
|
||||
# get directory contents
|
||||
if [ -d "$path" ]; then
|
||||
# first uppercase letters, then lowercase, first directories, then files
|
||||
ls_sorted="LC_COLLATE=C ls -A --group-directories-first $exclusions $path"
|
||||
# sorted array of files and directories
|
||||
local list && readarray -t list < <(eval "$ls_sorted")
|
||||
# length of array
|
||||
local size=${#list[@]}
|
||||
# skip empty directory
|
||||
[ "$size" == 0 ] && return
|
||||
fi
|
||||
# prefix of current element, collapse singletons into one line
|
||||
[ "$4" == "one" ] && printf '%s' "/" || printf '\n%s' "$head"
|
||||
# current element of the tree — relative hyperlink
|
||||
printf '%s' "<a href='${path#*/}'>${path##*/}</a>"
|
||||
# recursive calls for subdirectories
|
||||
if [ -d "$path" ]; then
|
||||
local list # array of files and directories
|
||||
readarray -t list < <(list_directory_contents "$path")
|
||||
local size=${#list[@]} # length of array
|
||||
local i # counter
|
||||
for ((i = 0; i < size; i++)); do
|
||||
if [ -z "${list[$i]}" ]; then
|
||||
continue # skip empty directory
|
||||
elif ((size == 1)); then
|
||||
if ((size == 1)); then
|
||||
directory_tree "$path/${list[$i]}" "$tail" "$tail" "one"
|
||||
elif ((i < size - 1)); then
|
||||
directory_tree "$path/${list[$i]}" "$tail├─ " "$tail│ "
|
||||
|
|
|
@ -12,10 +12,10 @@ lang: en
|
|||
{%- assign articles = "" | split: "" %}
|
||||
{%- assign articles = articles | push: "Directory tree with links" %}
|
||||
{%- capture article_brief %}
|
||||
We write a Bash script for building a directory tree for a repository in the Markdown file.
|
||||
We use only Bash tools and basic Linux software — `ls`, `sed`, `tr` and `echo` — without
|
||||
additional programs. The obtained file `DIRECTORY_TREE.md` will be used in the web interface
|
||||
to navigate through the objects of the repository.
|
||||
We write a Bash script for building a directory tree for a repository in the Markdown file. We
|
||||
use only Bash builtin tools and basic Linux software — `ls`, `sed`, `tr` and `printf` — without
|
||||
additional programs. The obtained file `DIRECTORY_TREE.md` is useful in the web-interface to
|
||||
navigate through the objects of the repository.
|
||||
|
||||
We create a recursive function and use it to bypass all files and directories of the repository,
|
||||
excluding the list from `.gitignore` — we build a directory structure in the form of a tree. We
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Дерево каталогов со ссылками
|
||||
description: Напишем скрипт Bash для построения дерева каталогов для репозитория в файле Markdown. Будем использовать только средства Bash и базовое ПО Linux без...
|
||||
description: Напишем скрипт Bash для построения дерева каталогов для репозитория в файле Markdown. Будем использовать только встроенные средства Bash и базовое ПО Linux...
|
||||
sections: [Рекурсия,Обработка файлов,Вёб-навигация]
|
||||
tags: [linux,bash,markdown,html,структура,каталоги,файлы,ссылки,сортировка]
|
||||
canonical_url: /ru/2023/08/03/directory-tree.html
|
||||
|
@ -9,11 +9,11 @@ title_translated: Directory tree with links
|
|||
date: 2023.08.03
|
||||
---
|
||||
|
||||
Напишем скрипт Bash для построения дерева каталогов для репозитория в
|
||||
файле Markdown. Будем использовать только средства Bash и базовое ПО Linux
|
||||
— `ls`, `sed`, `tr` и `echo` — без дополнительных программ. Полученный файл
|
||||
Напишем скрипт Bash для построения дерева каталогов для репозитория в файле
|
||||
Markdown. Будем использовать только встроенные средства Bash и базовое ПО Linux
|
||||
— `ls`, `sed`, `tr` и `printf` — без дополнительных программ. Полученный файл
|
||||
[`DIRECTORY_TREE.md`]({{ site.homepage_url }} "{{ site.homepage_name }}")
|
||||
будем использовать в вёб-интерфейсе для навигации по объектам репозитория.
|
||||
пригодится в вёб-интерфейсе для навигации по объектам репозитория.
|
||||
|
||||
Создаём рекурсивную функцию и с её помощью обходим все файлы и каталоги репозитория, за
|
||||
исключением списка из `.gitignore` — строим структуру каталогов в форме дерева. Выводим
|
||||
|
@ -23,31 +23,32 @@ date: 2023.08.03
|
|||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# отсортированный список файлов и каталогов
|
||||
function list_directory_contents {
|
||||
# сначала заглавные буквы, потом строчные, сначала каталоги, потом файлы
|
||||
eval "LC_COLLATE=C ls -A --group-directories-first $exclusions $1"
|
||||
}
|
||||
# дерево каталогов со ссылками
|
||||
function directory_tree {
|
||||
# аргументы
|
||||
local path="$1"
|
||||
local head="$2"
|
||||
local tail="$3"
|
||||
# префикс для текущего элемента
|
||||
[ "one" == "$4" ] && printf '%s' "/" || printf '\n%s' "$head"
|
||||
# текущий элемент дерева
|
||||
# получить содержимое каталога
|
||||
if [ -d "$path" ]; then
|
||||
# сначала заглавные буквы, потом строчные, сначала каталоги, потом файлы
|
||||
ls_sorted="LC_COLLATE=C ls -A --group-directories-first $exclusions $path"
|
||||
# отсортированный массив файлов и каталогов
|
||||
local list && readarray -t list < <(eval "$ls_sorted")
|
||||
# длина массива
|
||||
local size=${#list[@]}
|
||||
# пропустить пустой каталог
|
||||
[ "$size" == 0 ] && return
|
||||
fi
|
||||
# префикс текущего элемента, сворачивать синглтоны в одну строку
|
||||
[ "$4" == "one" ] && printf '%s' "/" || printf '\n%s' "$head"
|
||||
# текущий элемент дерева — относительная гиперссылка
|
||||
printf '%s' "<a href='${path#*/}'>${path##*/}</a>"
|
||||
# рекурсивные вызовы для подкаталогов
|
||||
if [ -d "$path" ]; then
|
||||
local list # массив файлов и каталогов
|
||||
readarray -t list < <(list_directory_contents "$path")
|
||||
local size=${#list[@]} # длина массива
|
||||
local i # счётчик
|
||||
for ((i = 0; i < size; i++)); do
|
||||
if [ -z "${list[$i]}" ]; then
|
||||
continue # пропустить пустой каталог
|
||||
elif ((size == 1)); then
|
||||
if ((size == 1)); then
|
||||
directory_tree "$path/${list[$i]}" "$tail" "$tail" "one"
|
||||
elif ((i < size - 1)); then
|
||||
directory_tree "$path/${list[$i]}" "$tail├─ " "$tail│ "
|
||||
|
|
|
@ -11,10 +11,10 @@ title_translated: Code with comments
|
|||
{%- assign articles = "" | split: "" %}
|
||||
{%- assign articles = articles | push: "Дерево каталогов со ссылками" %}
|
||||
{%- capture article_brief %}
|
||||
Напишем скрипт Bash для построения дерева каталогов для репозитория в файле Markdown.
|
||||
Будем использовать только средства Bash и базовое ПО Linux — `ls`, `sed`, `tr` и `echo`
|
||||
— без дополнительных программ. Полученный файл `DIRECTORY_TREE.md` будем использовать
|
||||
в вёб-интерфейсе для навигации по объектам репозитория.
|
||||
Напишем скрипт Bash для построения дерева каталогов для репозитория в файле Markdown. Будем
|
||||
использовать только встроенные средства Bash и базовое ПО Linux — `ls`, `sed`, `tr` и `printf`
|
||||
— без дополнительных программ. Полученный файл `DIRECTORY_TREE.md` пригодится в вёб-интерфейсе
|
||||
для навигации по объектам репозитория.
|
||||
|
||||
Создаём рекурсивную функцию и с её помощью обходим все файлы и каталоги репозитория, за
|
||||
исключением списка из `.gitignore` — строим структуру каталогов в форме дерева. Выводим
|
||||
|
|
Loading…
Add table
Reference in a new issue