1
0
Fork 0
pomodoro/bash_scripts/info_tree_license.sh

67 lines
2.9 KiB
Bash
Raw Normal View History

2023-12-17 08:06:45 +03:00
#!/bin/bash
echo "Построение дерева каталогов для каждого проекта и копирование файлов лицензии."
2023-12-17 08:20:25 +03:00
# отсортированный список файлов и каталогов
2023-12-17 08:06:45 +03:00
function list_directory_contents {
2023-12-17 08:20:25 +03:00
# сначала заглавные буквы, потом строчные, сначала каталоги, потом файлы
2023-12-17 08:06:45 +03:00
eval "LC_COLLATE=C ls -A --group-directories-first $exclusions $1"
}
2023-12-17 08:20:25 +03:00
# дерево каталогов со ссылками
2023-12-17 08:06:45 +03:00
function directory_tree {
2023-12-17 08:20:25 +03:00
# аргументы
2023-12-17 08:06:45 +03:00
local path="$1"
local head="$2"
local tail="$3"
2023-12-17 08:20:25 +03:00
# префикс для текущего элемента
2023-12-17 08:06:45 +03:00
if [ "one" == "$4" ]; then
echo -n "/"
else
echo -ne "\n$head"
fi
2023-12-17 08:20:25 +03:00
# текущий элемент дерева
2023-12-17 08:06:45 +03:00
echo -n "<a href='${path#*/}'>${path##*/}</a>"
2023-12-17 08:20:25 +03:00
# рекурсивные вызовы для подкаталогов
2023-12-17 08:06:45 +03:00
if [ -d "$path" ]; then
2023-12-17 08:20:25 +03:00
local list # массив файлов и каталогов
2023-12-17 08:06:45 +03:00
readarray -t list <<<"$(list_directory_contents "$path")"
2023-12-17 08:20:25 +03:00
local len=${#list[@]} # размер массива
local i # счётчик
2023-12-17 08:06:45 +03:00
for ((i = 0; i < len; i++)); do
if [ -z "${list[$i]}" ]; then
2023-12-17 08:20:25 +03:00
continue # пропустить пустой каталог
2023-12-17 08:06:45 +03:00
elif ((len == 1)); then
directory_tree "$path/${list[$i]}" "$tail" "$tail" "one"
elif ((i < len - 1)); then
directory_tree "$path/${list[$i]}" "$tail├─ " "$tail"
else
directory_tree "$path/${list[$i]}" "$tail└─ " "$tail "
fi
done
fi
}
2023-12-17 08:20:25 +03:00
cd .. # выходим из папки в корень репозитория
basedir=$(pwd) # текущий репозиторий
currentTimeMillis=$(date '+%s%3N')
# обходим все репозитории, расположенные на одном уровне с текущим
2023-12-17 08:06:45 +03:00
find .. -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do
echo "Обработка: $dir"
2023-12-17 08:20:25 +03:00
# заходим в каталог, иначе пропускаем итерацию
2023-12-17 08:06:45 +03:00
cd "$dir" || continue
2023-12-17 08:20:25 +03:00
# строка исключений для 'ls' из списка '.gitignore' — неотслеживаемые файлы
2023-12-17 08:06:45 +03:00
exclusions="-I \".git\" $(sed 's/^/ -I "/;s/$/"/' .gitignore | tr -d '\n')"
2023-12-17 08:20:25 +03:00
# помещаем дерево в контейнер, добавляем заголовок и выводим в файл
2023-12-17 08:06:45 +03:00
{
echo "## Дерево каталогов"
echo -ne "\n<pre>"
directory_tree .
echo -e "\n</pre>"
} >DIRECTORY_TREE.md
2023-12-17 08:20:25 +03:00
# копирование файлов из этого репозитория во все остальные
2023-12-17 08:06:45 +03:00
if [ "${dir##*/}" != "${basedir##*/}" ]; then
rm CONTRIBUTING.md
rm ./*LICENSE*
cp "$basedir"/CONTRIBUTING.md .
cp "$basedir"/*LICENSE* .
fi
done
2023-12-17 08:20:25 +03:00
echo "Время выполнения: $(("$(date '+%s%3N')" - "$currentTimeMillis")) мс."