From be200a046f39d42e77fc055a4ad9dc14e83614fc Mon Sep 17 00:00:00 2001 From: mirivlad Date: Mon, 24 Nov 2025 16:33:16 +0800 Subject: [PATCH] add readdir recursive and get content for files --- read_dir_content.sh | 82 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 read_dir_content.sh diff --git a/read_dir_content.sh b/read_dir_content.sh new file mode 100755 index 0000000..5dfd797 --- /dev/null +++ b/read_dir_content.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Параметры по умолчанию +output_file="" +exclude_dirs=() +target_dir="." + +# Функция для вывода справки +usage() { + echo "Использование: $0 -o [--exclude ] [--exclude ] []" + echo "Пример: $0 -o project.txt --exclude vendor --exclude node_modules ." + exit 1 +} + +# Разбор аргументов командной строки +while [[ $# -gt 0 ]]; do + case $1 in + -o) + output_file="$2" + shift 2 + ;; + --exclude) + exclude_dirs+=("$2") + shift 2 + ;; + -*) + echo "Неизвестная опция: $1" + usage + ;; + *) + target_dir="$1" + shift + ;; + esac +done + +# Проверка обязательных параметров +if [[ -z "$output_file" ]]; then + echo "Ошибка: Требуется указать выходной файл с помощью -o" + usage +fi + +# Проверка существования целевой директории +if [[ ! -d "$target_dir" ]]; then + echo "Ошибка: Директория '$target_dir' не существует" + exit 1 +fi + +# Создание временного файла +temp_file=$(mktemp) + +# Построение find команды с исключениями +find_command="find \"$target_dir\" -type f" + +if [[ ${#exclude_dirs[@]} -gt 0 ]]; then + for exclude_dir in "${exclude_dirs[@]}"; do + find_command+=" -not -path \"*/$exclude_dir/*\"" + done +fi + +# Выполнение обхода и обработка файлов +eval "$find_command" | while read -r file; do + # Получаем относительный путь + relative_path="${file#$(readlink -f "$target_dir")/}" + + # Проверяем, что файл читаем + if [[ -r "$file" ]]; then + # Записываем путь к файлу + echo "// $relative_path" >> "$temp_file" + # Записываем содержимое файла + cat "$file" >> "$temp_file" + # Добавляем разделитель между файлами + echo "" >> "$temp_file" + else + echo "Предупреждение: Невозможно прочитать файл $file" >&2 + fi +done + +# Перемещаем временный файл в окончательный +mv "$temp_file" "$output_file" + +echo "Структура проекта сохранена в: $output_file"