#!/bin/bash # Скрипт для клонирования проектов из TSV файла # Формат TSV: check, project_name, project_url # Проверяем, что передан аргумент с именем файла if [ $# -eq 0 ]; then echo "Использование: $0 [base_dir]" echo "Пример: $0 projects.tsv" echo "Пример: $0 projects.tsv /path/to/projects" echo "Пример: $0 projects.tsv ./projects" echo "Пример: $0 projects.tsv ../workspace" exit 1 fi TSV_FILE="$1" BASE_DIR="${2:-.}" # Если base_dir не указан, используем текущую директорию # Проверяем существование файла if [ ! -f "$TSV_FILE" ]; then echo "Ошибка: Файл '$TSV_FILE' не найден" exit 1 fi # Создаем базовую директорию, если она не существует if [ ! -d "$BASE_DIR" ]; then echo "Создаем базовую директорию: $BASE_DIR" mkdir -p "$BASE_DIR" fi echo "Начинаем клонирование проектов из файла: $TSV_FILE" echo "Базовая директория: $BASE_DIR" echo "================================================" # Читаем TSV файл, пропуская заголовок (если есть) # Ожидаемый формат: check, project_name, project_url while IFS=$'\t' read -r check project_name project_url; do # Пропускаем пустые строки и строки с заголовками if [[ -z "$check" || "$check" == "check" ]]; then continue fi # Проверяем, нужно ли клонировать (если check = X) if [[ "$check" == "X" || "$check" == "x" ]]; then echo "Клонирование: $project_name" echo "URL: $project_url" # Проверяем, что директория не существует PROJECT_PATH="$BASE_DIR/$project_name" if [ -d "$PROJECT_PATH" ]; then echo "Предупреждение: Директория '$PROJECT_PATH' уже существует, пропускаем" echo "---" continue fi # Выполняем git clone if git clone "$project_url" "$PROJECT_PATH"; then echo "✓ Успешно клонирован: $project_name" else echo "✗ Ошибка при клонировании: $project_name" fi echo "---" else echo "Пропускаем: $project_name (check = '$check')" fi done < "$TSV_FILE" echo "Клонирование завершено!"