Загрузка данных


#!/usr/bin/env bash
set -euo pipefail

# === УКАЖИ ТУТ ПАПКУ С НОВЫМИ ШРИФТАМИ PT SANS ===
PTSANS_SRC_DIR="/home/USER/Загрузки/PtSans"

# Куда ставим новый шрифт
INSTALL_DIR="/usr/local/share/fonts/PtSans"

# Куда складываем старые найденные версии
BACKUP_DIR="/root/font-backup/PTSans-selected-$(date +%Y%m%d-%H%M%S)"

# Где искать старые шрифты
SEARCH_DIRS=(
  "/usr/share/fonts"
  "/usr/local/share/fonts"
  "/root/.local/share/fonts"
  "/home"
)

# Удаляем ТОЛЬКО эти варианты
TARGET_PATTERNS=(
  "*PtSans-Bold.ttf"
  "*PtSans-Bold.otf"
  "*PTSans-Bold.ttf"
  "*PTSans-Bold.otf"
  "*PT Sans Bold.ttf"
  "*PT Sans Bold.otf"
  "*PT_Sans-Bold.ttf"
  "*PT_Sans-Bold.otf"

  "*PtSans-BoldItalic.ttf"
  "*PtSans-BoldItalic.otf"
  "*PTSans-BoldItalic.ttf"
  "*PTSans-BoldItalic.otf"
  "*PT Sans Bold Italic.ttf"
  "*PT Sans Bold Italic.otf"
  "*PT_Sans-BoldItalic.ttf"
  "*PT_Sans-BoldItalic.otf"

  "*PtSans-Italic.ttf"
  "*PtSans-Italic.otf"
  "*PTSans-Italic.ttf"
  "*PTSans-Italic.otf"
  "*PT Sans Italic.ttf"
  "*PT Sans Italic.otf"
  "*PT_Sans-Italic.ttf"
  "*PT_Sans-Italic.otf"

  "*PtSansNarrow-Bold.ttf"
  "*PtSansNarrow-Bold.otf"
  "*PTSansNarrow-Bold.ttf"
  "*PTSansNarrow-Bold.otf"
  "*PT Sans Narrow Bold.ttf"
  "*PT Sans Narrow Bold.otf"
  "*PT_Sans_Narrow-Bold.ttf"
  "*PT_Sans_Narrow-Bold.otf"

  "*PtSansNarrow-Regular.ttf"
  "*PtSansNarrow-Regular.otf"
  "*PTSansNarrow-Regular.ttf"
  "*PTSansNarrow-Regular.otf"
  "*PT Sans Narrow Regular.ttf"
  "*PT Sans Narrow Regular.otf"
  "*PT_Sans_Narrow-Regular.ttf"
  "*PT_Sans_Narrow-Regular.otf"

  "*PtSans-Regular.ttf"
  "*PtSans-Regular.otf"
  "*PTSans-Regular.ttf"
  "*PTSans-Regular.otf"
  "*PT Sans Regular.ttf"
  "*PT Sans Regular.otf"
  "*PT_Sans-Regular.ttf"
  "*PT_Sans-Regular.otf"
)

echo "=== Замена выбранных вариантов PT Sans на ALT Workstation 11.1 ==="

if [[ "$EUID" -ne 0 ]]; then
  echo "Ошибка: запусти скрипт от root:"
  echo "  su -"
  echo "  bash $0"
  exit 1
fi

if [[ ! -d "$PTSANS_SRC_DIR" ]]; then
  echo "Ошибка: папка с новыми шрифтами не найдена:"
  echo "  $PTSANS_SRC_DIR"
  exit 1
fi

mapfile -d '' NEW_FONTS < <(
  find "$PTSANS_SRC_DIR" -maxdepth 1 -type f \( -iname "*.ttf" -o -iname "*.otf" \) -print0
)

if [[ "${#NEW_FONTS[@]}" -eq 0 ]]; then
  echo "Ошибка: в папке нет файлов .ttf или .otf:"
  echo "  $PTSANS_SRC_DIR"
  exit 1
fi

echo
echo "Новые шрифты найдены:"
for font in "${NEW_FONTS[@]}"; do
  echo "  - $(basename "$font")"
done

echo
echo "Backup старых шрифтов будет тут:"
echo "  $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"

FOUND_OLD=0

backup_and_remove_font() {
  local old_font="$1"

  [[ -f "$old_font" ]] || return 0

  # Не трогаем исходную папку с новыми шрифтами
  if [[ "$old_font" == "$PTSANS_SRC_DIR/"* ]]; then
    return 0
  fi

  # Не трогаем backup
  if [[ "$old_font" == "$BACKUP_DIR/"* ]]; then
    return 0
  fi

  FOUND_OLD=1

  local rel_path="${old_font#/}"
  local backup_path="$BACKUP_DIR/$rel_path"

  mkdir -p "$(dirname "$backup_path")"

  echo "Удаляю старый файл:"
  echo "  $old_font"

  if rpm -qf "$old_font" >/dev/null 2>&1; then
    echo "  Внимание: файл принадлежит RPM-пакету:"
    rpm -qf "$old_font" || true
  fi

  cp -a "$old_font" "$backup_path"
  rm -f "$old_font"
}

echo
echo "Ищу и удаляю только выбранные варианты PT Sans..."

for dir in "${SEARCH_DIRS[@]}"; do
  [[ -d "$dir" ]] || continue

  for pattern in "${TARGET_PATTERNS[@]}"; do
    while IFS= read -r -d '' old_font; do
      backup_and_remove_font "$old_font"
    done < <(
      find "$dir" -type f -iname "$pattern" -print0 2>/dev/null
    )
  done
done

echo
echo "Очищаю папку установки:"
echo "  $INSTALL_DIR"
rm -rf "$INSTALL_DIR"
mkdir -p "$INSTALL_DIR"

echo
echo "Ставлю новые шрифты..."
for font in "${NEW_FONTS[@]}"; do
  cp -a "$font" "$INSTALL_DIR/"
done

chown -R root:root "$INSTALL_DIR"
find "$INSTALL_DIR" -type d -exec chmod 755 {} \;
find "$INSTALL_DIR" -type f \( -iname "*.ttf" -o -iname "*.otf" \) -exec chmod 644 {} \;

echo
echo "Обновляю кэш шрифтов..."
fc-cache -f -v >/dev/null

echo
echo "Проверка PT Sans:"
fc-list | grep -Ei "PT Sans|PTSans" || {
  echo "Внимание: fc-list не показал PT Sans. Возможно, у новых файлов другое внутреннее имя."
}

echo
echo "Готово."
echo "Новые шрифты установлены в:"
echo "  $INSTALL_DIR"

if [[ "$FOUND_OLD" -eq 1 ]]; then
  echo "Старые удалённые версии сохранены в:"
  echo "  $BACKUP_DIR"
else
  echo "Старые указанные варианты PT Sans не найдены."
fi

echo
echo "Лучше выйти из сеанса и зайти снова."