Загрузка данных
#!/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 "Лучше выйти из сеанса и зайти снова."