66 lines
2.9 KiB
Bash
Executable file
66 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
||
echo "Построение дерева каталогов для каждого проекта и копирование файлов лицензии."
|
||
# отсортированный список файлов и каталогов
|
||
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"
|
||
# префикс для текущего элемента
|
||
if [ "one" == "$4" ]; then
|
||
echo -n "/"
|
||
else
|
||
echo -ne "\n$head"
|
||
fi
|
||
# текущий элемент дерева
|
||
echo -n "<a href='${path#*/}'>${path##*/}</a>"
|
||
# рекурсивные вызовы для подкаталогов
|
||
if [ -d "$path" ]; then
|
||
local list # массив файлов и каталогов
|
||
readarray -t list <<<"$(list_directory_contents "$path")"
|
||
local len=${#list[@]} # размер массива
|
||
local i # счётчик
|
||
for ((i = 0; i < len; i++)); do
|
||
if [ -z "${list[$i]}" ]; then
|
||
continue # пропустить пустой каталог
|
||
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
|
||
}
|
||
cd .. # выходим из папки в корень репозитория
|
||
basedir=$(pwd) # текущий репозиторий
|
||
currentTimeMillis=$(date '+%s%3N')
|
||
# обходим все репозитории, расположенные на одном уровне с текущим
|
||
find .. -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do
|
||
echo "Обработка: $dir"
|
||
# заходим в каталог, иначе пропускаем итерацию
|
||
cd "$dir" || continue
|
||
# строка исключений для 'ls' из списка '.gitignore' — неотслеживаемые файлы
|
||
exclusions="-I \".git\" $(sed 's/^/ -I "/;s/$/"/' .gitignore | tr -d '\n')"
|
||
# помещаем дерево в контейнер, добавляем заголовок и выводим в файл
|
||
{
|
||
echo "## Дерево каталогов"
|
||
echo -ne "\n<pre>"
|
||
directory_tree .
|
||
echo -e "\n</pre>"
|
||
} >DIRECTORY_TREE.md
|
||
# копирование файлов из этого репозитория во все остальные
|
||
if [ "${dir##*/}" != "${basedir##*/}" ]; then
|
||
rm CONTRIBUTING.md
|
||
rm ./*LICENSE*
|
||
cp "$basedir"/CONTRIBUTING.md .
|
||
cp "$basedir"/*LICENSE* .
|
||
fi
|
||
done
|
||
echo "Время выполнения: $(("$(date '+%s%3N')" - "$currentTimeMillis")) мс."
|