Преобразование кодировок, форматов графики и иное.

Установка, настройка, эксплуатация.

Модератор: ROOT

Преобразование кодировок, форматов графики и иное.

Сообщение ROOT » 18 июл 2017, 13:19

Оглавление


Темы
 Введение 
 Практические примеры и совместимость со старыми утилитами 
 Полезные однострочники для конвертации 
 Автоматизация конвертации и пакетная обработка 
 Дополнительные примеры и утилиты Fedora 
 Прочие преобразования: Base64, HEX, транслитерация каталогов 



 Введение 

Тема посвящена утилитам, которые помогают выполнять типичные задачи по преобразованию данных в Fedora:
— смена кодировок текстовых файлов,
— конвертация графических форматов,
— базовое определение типа файлов и работы с мультимедиа.

Инструменты подбираются из стандартных пакетов Fedora, без использования тяжёлых GUI-программ.



Преобразование кодировок текста

Современные системы Fedora по умолчанию используют кодировку UTF-8.
Однако при работе со старыми файлами (KOI8-R, CP1251 и т.п.) может потребоваться перекодировка.

Для этого используется утилита iconv:

Код: выделить все
iconv -f koi8-r -t utf-8 input.txt -o output.txt


Где:
  1. -f — исходная кодировка,
  2. -t — целевая кодировка,
  3. -o — имя выходного файла.

Проверить кодировку можно командой file:

Код: выделить все
file -bi input.txt


Пример вывода:
Код: выделить все
text/plain; charset=koi8-r


Для автоматического определения кодировки полезна утилита chardet (из пакета python3-chardet):

Код: выделить все
sudo dnf install python3-chardet
chardet input.txt




Преобразование форматов изображений

Fedora использует современную версию ImageMagick, в которой основная команда теперь — magick.

Примеры:

Код: выделить все
magick image.png image.jpg
magick convert -resize 800x600 photo.jpg small.jpg


Проверить информацию о файле:

Код: выделить все
magick identify image.png


Для пакетной обработки можно использовать простые конструкции bash:

Код: выделить все
for i in *.png; do magick "$i" "${i%.png}.jpg"; done




Преобразование видео и аудио

Для мультимедиа используется ffmpeg — универсальный конвертер аудио и видео.

Установка:

Код: выделить все
sudo dnf install ffmpeg


Примеры:
Код: выделить все
# Конвертация видео в MP4
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4

# Извлечение звука из видео
ffmpeg -i video.mp4 -vn -acodec copy audio.aac




Преобразование форматов документов

Пакет pandoc позволяет конвертировать между различными текстовыми форматами:
Код: выделить все
sudo dnf install pandoc


Примеры:
Код: выделить все
pandoc file.md -o file.html
pandoc file.md -o file.pdf




Дополнительные утилиты

УтилитаНазначение
dos2unix / unix2dosКонвертация перевода строк DOS ↔ Unix
encaОпределение и преобразование кодировок (альтернатива iconv)
file-rollerОпределение типа архивов и распаковка
identify (из ImageMagick)Информация о графических файлах




Заключение

Fedora предоставляет богатый набор инструментов для преобразования данных в текстовом и графическом виде.
Для текстов и кодировок — iconv и chardet,
для изображений — magick,
для видео и аудио — ffmpeg,
для документов — pandoc.

Эти утилиты легко комбинируются в скриптах и автоматизации задач администратора.



 Практические примеры и совместимость со старыми утилитами 

Классические способы по-прежнему работают, но некоторые утилиты имеют обновлённые вызовы.

Преобразование кодировок текста
Код: выделить все
iconv -f koi8-r -t utf-8 старый_файл.txt -o новый_файл.txt
recode koi8-r..utf8 файл.txt
file -i файл.txt
enca файл.txt


Современный аналог (Python-утилита):
Код: выделить все
chardet файл.txt


Конвертация изображений (старый способ)
Код: выделить все
convert image.png image.jpg
convert -resize 1024x768 wallpaper.jpg new_wallpaper.jpg


Современный вызов:
Код: выделить все
magick image.png image.jpg
magick convert -resize 1024x768 wallpaper.jpg new_wallpaper.jpg


Пакетная обработка
Код: выделить все
for i in *.txt; do iconv -f koi8-r -t utf-8 "$i" -o "utf8_$i"; done
for i in *.png; do magick "$i" "${i%.png}.jpg"; done




Сводная таблица аналогов

Утилита (старая)Актуальная заменаНазначение
iconviconv (актуальна)Преобразование кодировок текста
recodeiconv / chardetМассовое перекодирование файлов
convertmagickОбработка и конвертация изображений
file / encafile / chardetОпределение кодировки и типа файлов




Заключение

Утилиты `iconv`, `convert`, `recode`, `enca` продолжают работать и на новых версиях Fedora.
Тем не менее, для Unicode-окружений предпочтительнее использовать `magick`, `chardet` и `pandoc`.



 Полезные однострочники для конвертации 

Текст
Код: выделить все
for i in *.txt; do iconv -f cp1251 -t utf-8 "$i" -o "utf8_$i"; done
for i in *.txt; do file -bi "$i"; done


Изображения
Код: выделить все
for i in *.jpg; do magick "$i" "${i%.jpg}.png"; done
for i in *.png; do magick "$i" -resize 800x "${i%.png}_small.png"; done


Видео и аудио
Код: выделить все
for i in *.mkv; do ffmpeg -i "$i" -c:v libx264 -c:a aac "${i%.mkv}.mp4"; done
for i in *.mp4; do ffmpeg -i "$i" -vn -ab 192k "${i%.mp4}.mp3"; done


Документы
Код: выделить все
for i in *.md; do pandoc "$i" -o "${i%.md}.html"; done
for i in *.md; do pandoc "$i" -o "${i%.md}.pdf"; done




 Автоматизация конвертации и пакетная обработка 

Пример скрипта
Код: выделить все
#!/bin/bash
LOGFILE="/var/log/convert.log"
WORKDIR="$HOME/convert"
TEXTDIR="$WORKDIR/text"
IMGDIR="$WORKDIR/images"

mkdir -p "$TEXTDIR" "$IMGDIR"

echo "=== $(date '+%F %T') ===" >> "$LOGFILE"

for file in "$TEXTDIR"/*.txt; do
    [ -e "$file" ] || continue
    ENCODING=$(file -bi "$file" | awk -F'=' '{print $2}')
    if [[ "$ENCODING" != "utf-8" ]]; then
        iconv -f "$ENCODING" -t utf-8 "$file" -o "${file%.txt}_utf8.txt"
        echo "$file → перекодирован" >> "$LOGFILE"
    fi
done

for img in "$IMGDIR"/*.jpg; do
    [ -e "$img" ] || continue
    magick "$img" -resize 1024x768 "${img%.jpg}_small.jpg"
    echo "$img → уменьшен" >> "$LOGFILE"
done


Запуск по расписанию
Код: выделить все
crontab -e
0 3 * * * /home/user/convert.sh >/dev/null 2>&1


Пример лог-файла
Код: выделить все
=== 2025-10-18 03:00:01 ===
Файл: text/readme.txt (кодировка iso-8859-5) → перекодирован
Изображение images/photo.jpg → уменьшено до 1024x768




Заключение

Этот скрипт можно расширить: добавить обработку видео (`ffmpeg`), документов (`pandoc`)
или интеграцию с systemd-таймерами для регулярного запуска.
Fedora остаётся гибкой системой, где классические инструменты легко комбинируются с современными средствами автоматизации.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 2202 2083 5115 2302


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 460
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 18:33



 Дополнительные примеры и утилиты Fedora 

Ниже приведены вспомогательные инструменты и сценарии, не вошедшие в основные разделы.
Они полезны при пакетной обработке текстов, графики и при работе со смешанными кодировками.



Определение и перекодировка текстов с использованием enca

Утилита enca может определить кодировку и при необходимости перекодировать файл.
Особенно полезна при работе со старыми документами в CP1251, KOI8-R и т.д.

Код: выделить все
sudo dnf install enca
enca -L ru input.txt
enca -L ru -x utf-8 input.txt > output.txt


-L ru указывает язык (русский),
-x utf-8 задаёт выходную кодировку.



Преобразование перевода строк DOS ↔ Unix

При работе с логами или текстами, пришедшими из Windows, часто нужно привести формат перевода строк.

Код: выделить все
sudo dnf install dos2unix
dos2unix file_dos.txt
unix2dos file_unix.txt


Утилиты dos2unix и unix2dos изменяют окончания строк, не трогая содержимое файлов.



Конвертация графики (обратная совместимость)

В старых скриптах по-прежнему встречается использование команды convert.
В современных версиях Fedora она является ссылкой на magick convert, но для совместимости её можно оставить.

Код: выделить все
sudo dnf install ImageMagick
convert old_image.bmp new_image.jpg
convert -resize 1024x768 photo.jpg photo_small.jpg


Если требуется полная совместимость, рекомендуется использовать современный вызов:
Код: выделить все
magick convert old_image.bmp new_image.jpg




Определение типа и кодировки файла

Команда file сообщает MIME-тип и кодировку. Это позволяет автоматически определить, как обрабатывать файл в скриптах.

Код: выделить все
file filename
file -i filename


Пример вывода:
Код: выделить все
filename: text/plain; charset=iso-8859-5




Пример универсального скрипта автоматической обработки файлов

Этот вариант объединяет определение типа файла, перекодировку текста и конвертацию изображений.

Код: выделить все
#!/bin/bash
WORKDIR="$HOME/files"
LOGFILE="$WORKDIR/process.log"
mkdir -p "$WORKDIR"

echo "=== $(date '+%F %T') ===" >> "$LOGFILE"

for f in "$WORKDIR"/*; do
    [ -e "$f" ] || continue
    TYPE=$(file -b --mime-type "$f")
    case "$TYPE" in
        text/*)
            ENCODING=$(file -bi "$f" | awk -F'=' '{print $2}')
            if [[ "$ENCODING" != "utf-8" ]]; then
                iconv -f "$ENCODING" -t utf-8 "$f" -o "${f%.txt}_utf8.txt" && \
                echo "[TEXT] $f перекодирован из $ENCODING в UTF-8" >> "$LOGFILE"
            fi
            ;;
        image/png)
            magick "$f" "${f%.png}.jpg" && \
            echo "[IMG] $f → преобразован в JPG" >> "$LOGFILE"
            ;;
        image/jpeg)
            magick "$f" -resize 1024x768 "${f%.jpg}_small.jpg" && \
            echo "[IMG] $f → уменьшен до 1024x768" >> "$LOGFILE"
            ;;
        *)
            echo "[SKIP] Неизвестный тип: $TYPE ($f)" >> "$LOGFILE"
            ;;
    esac
done


Пример вывода лог-файла:
Код: выделить все
=== 2025-10-18 04:30:01 ===
[TEXT] notes.txt перекодирован из koi8-r в UTF-8
[IMG] photo.png → преобразован в JPG
[IMG] banner.jpg → уменьшен до 1024x768




Дополнительные утилиты Fedora, полезные для преобразований

УтилитаНазначение
fileОпределение типа файла и кодировки
encaОпределение и перекодировка текста по языку
dos2unix / unix2dosПреобразование перевода строк Windows ↔ Unix
magickСовременный инструмент для обработки изображений
ffmpegКонвертация видео и аудио




Заключение

Примеры из этого раздела расширяют базовые возможности Fedora для автоматизированной обработки файлов.
Используя стандартные инструменты (`file`, `iconv`, `enca`, `magick`, `ffmpeg`), можно легко построить универсальные скрипты,
включая обработку текстов, изображений и мультимедиа без привлечения внешнего ПО.
Все утилиты доступны из стандартных репозиториев и совместимы с Fedora 39–41.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 2202 2083 5115 2302


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 460
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 18:35



 Прочие преобразования: Base64, HEX, транслитерация каталогов 

Этот раздел включает дополнительные приёмы и сценарии, которые часто применяются при администрировании систем Fedora.



Преобразование Base64 ↔ текст

Base64 используется для кодирования бинарных данных в текстовом виде.
Встроенные утилиты позволяют быстро перекодировать строки и файлы.

Код: выделить все
# Кодировать строку в Base64
echo "тестовая строка" | base64

# Декодировать Base64 обратно в текст
echo "0YLQtdGB0YI=" | base64 -d


Для работы с файлами:
Код: выделить все
base64 image.png > image.b64
base64 -d image.b64 > image.png




Преобразование HEX ↔ текст

Иногда данные сохраняются в шестнадцатеричном виде (например, в дампах или SQL-таблицах).
Для конвертации можно использовать стандартные инструменты `xxd` и `od`.

Код: выделить все
# Преобразовать текст в HEX
echo "Hello" | xxd -p

# Преобразовать HEX обратно в текст
echo "48656c6c6f0a" | xxd -r -p


Пример с файлом:
Код: выделить все
xxd -p file.bin > file.hex
xxd -r -p file.hex > file.bin




Рекурсивная перекодировка имён каталогов в транслит

Следующий скрипт выполняет транслитерацию имён каталогов из кириллицы в латиницу.
Работает рекурсивно, аккуратно переименовывает каталоги, избегая конфликтов.
Подходит для ситуаций, когда системы не поддерживают кириллические пути.

Код: выделить все
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# каталогов в транслит.

shopt -s nullglob
IFS=$'\n'
while true; do
    COUNT=0
    for NAME in `find . -type d`; do
        BNAME=`basename "$NAME"`
        BFOLDER=${NAME%/*}
        TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
        TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
        TRS=${TRS//ч/ch}; TRS=${TRS//Ч/CH}
        TRS=${TRS//ш/sh}; TRS=${TRS//Ш/SH}
        TRS=${TRS//ё/jo}; TRS=${TRS//Ё/JO}
        TRS=${TRS//ж/zh}; TRS=${TRS//Ж/ZH}
        TRS=${TRS//щ/sh}; TRS=${TRS//Щ/SH}
        TRS=${TRS//э/je}; TRS=${TRS//Э/JE}
        TRS=${TRS//ю/ju}; TRS=${TRS//Ю/JU}
        TRS=${TRS//я/ja}; TRS=${TRS//Я/JA}
        TRS=${TRS//ъ/}; TRS=${TRS//Ь/}
        if [[ "$TRS" != "$BNAME" ]]; then
            NEWTRS="$BFOLDER/$TRS"
            COUNT=`expr $COUNT + 1`
            mv -v "$NAME" "$NEWTRS"
            break
        fi
    done
    if [ $COUNT -eq 0 ]; then
        echo "Everything seems to be done"
        exit
    fi
done




Пример результата

Исходное имяПосле транслита
Рабочие документыRabochie dokumenty
Фотографии отпускFotografii otpusk




Заключение

Base64, HEX и транслитерация — мелкие, но часто используемые инструменты системного администратора.
В Fedora все они доступны «из коробки» и не требуют дополнительных пакетов.
Эти команды удобно использовать в скриптах автоматизации и при миграции данных между системами.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 2202 2083 5115 2302


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 460
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 18:36



Собираем несколько JPG файлов в один PDF
Код: выделить все
convert -compress -quality 85 *.png doc.pdf

Склеить нескольких JPG файлов в один PDF и расположить по два на один лист можно воспользоваться командой:
Код: выделить все
convert -density 300x300 -quality 100 *.jpg -resize 50% -append output.pdf

где:
  • -density 300x300 устанавливает разрешение изображения
  • -quality 100 устанавливает качество изображения
  • *.jpg указывает на все JPG файлы в текущем каталоге
  • -resize 50% сжимает изображения на 50% (если нужно уменьшить размер исходных изображений)
  • -append размещает два изображения на одном листе
  • output.pdf - имя создаваемого PDF файла
После выполнения команды у вас будет создан PDF файл, содержащий все ваши JPG изображения с разбиением по два на один лист и сжатием.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 2202 2083 5115 2302


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 460
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный


Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron