feat: Add variable name_suffix; Pass shellcheck; Discard useless variables from main script
This commit is contained in:
		@@ -20,7 +20,7 @@ backup files and databases.
 | 
			
		||||
Описание
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
boring-backup - это расширяемая утилита для резервного копирования на основе сценариев Bash. По умолчанию предусмотрено создание резервных копий файлов с помощью ``tar`` и дампов баз данных MySQL/MariaDB и PostgreSQL.
 | 
			
		||||
boring-backup - это расширяемая утилита для резервного копирования на основе сценариев Bash.
 | 
			
		||||
 | 
			
		||||
Опции
 | 
			
		||||
-----
 | 
			
		||||
@@ -35,28 +35,26 @@ boring-backup - это расширяемая утилита для резерв
 | 
			
		||||
Быстрый старт
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
boring-backup можно рассматривать как небольшой фреймворк/библиотеку для создания сценариев резервного копирования. boring-backup не реализует собственный язык сценариев, а полагается на Bash. В любом варианте применения утилита требует написания сценария для выполнения бэкапа.
 | 
			
		||||
 | 
			
		||||
В сценариях можно использовать переменные и функции. Сценарий импортируется в основной скрипт с помощью команды ``source`` (см. ``bash``\(1) п. SHELL BUILTIN COMMANDS).
 | 
			
		||||
boring-backup можно рассматривать как фреймворк или библиотеку для создания сценариев резервного копирования. Сценарии должны содержать валидный код на Bash. Сценарий импортируется в основной скрипт с помощью команды ``source`` (см. ``bash``\(1) п. SHELL BUILTIN COMMANDS).
 | 
			
		||||
 | 
			
		||||
Простейший сценарий резервного копирования выглядит следующим образом::
 | 
			
		||||
 | 
			
		||||
    sources=('file:/home/user')
 | 
			
		||||
    targets=('file:/var/backup')
 | 
			
		||||
 | 
			
		||||
Здесь массивы `sources` и `targets` определяют точки или поинты (`points`) резервного копирования — источники (`sources`) и назначения (`targets`). Это основные сущности, с которыми работает boring-backup. Вот некоторые особенности поинтов:
 | 
			
		||||
Здесь массивы `sources` и `targets` определяют точки, они же поинты (`points`) резервного копирования: источники (`sources`) и назначения (`targets`). Это основные сущности, с которыми работает boring-backup. Вот некоторые особенности поинтов:
 | 
			
		||||
 | 
			
		||||
- Все поинты указываются в формате URI. Описание URI также есть в этой документации ниже.
 | 
			
		||||
- Все поинты указываются в формате URI.
 | 
			
		||||
- Поинты могут указывать как на локальные (размещённые на текущей машине), так и на удалённые (размещённые на удалённой машине) ресурсы.
 | 
			
		||||
- Можно указать как несколько источников, так и несколько назначений.
 | 
			
		||||
 | 
			
		||||
Для выполнения бэкапа директорий или отдельных файлов применяется схема URI `file`. В схеме `file` нельзя указать директорию, размещённую на удалённом хранилище (за исключением случая, когда удалённое хранилище примонтировано как файловая система), для этого используйте другие схемы. В примере выше будет выполнена резервная копия локальной директории /home/user в другую локальную директорию /var/backup. Поскольку в сценарии из примера нет ничего, кроме указания точек `sources` и `targets`, бэкап будет выполнен с параметрами по умолчанию: директория /home/user будет заархивирована с помощью утилиты ``tar``\(1), архив будет сжат с помощью утилиты ``gzip``\(1) и помещён в директорию /var/backup. Имя архива будет сложено из строки::
 | 
			
		||||
Для выполнения бэкапа директорий или отдельных файлов применяется схема URI `file`. В схеме `file` нельзя указать директорию, размещённую на удалённом хранилище (за исключением случая, когда удалённое хранилище примонтировано как файловая система), для этого используйте другие схемы. В примере выше будет выполнена резервная копия локальной директории /home/user в другую локальную директорию /var/backup. Поскольку в сценарии из примера нет ничего, кроме указания точек `sources` и `targets`, бэкап будет выполнен с параметрами по умолчанию: директория /home/user будет заархивирована с помощью утилиты ``tar``\(1) и помещён в директорию /var/backup. Имя архива будет сложено из строки::
 | 
			
		||||
 | 
			
		||||
    ${prefix}${name}${date_fmt}${name_ext}
 | 
			
		||||
    ${name_prefix}${name}${name_date_fmt}${name_suffix}${name_ext}
 | 
			
		||||
 | 
			
		||||
Описание переменных см. в разделе ПЕРЕМЕННЫЕ. Пример имени файла:: 
 | 
			
		||||
 | 
			
		||||
    example.sh_example_20220515-0953.tar.gz
 | 
			
		||||
    example.sh_example_2022.05.15-0953.tar
 | 
			
		||||
 | 
			
		||||
Обзор URI
 | 
			
		||||
---------
 | 
			
		||||
@@ -101,8 +99,9 @@ Perl 5::
 | 
			
		||||
``````````````````````````````````````````````````
 | 
			
		||||
 | 
			
		||||
file
 | 
			
		||||
    Может содержать путь к локальному файлу или директории. Файлы архивируются при помощи ``tar`` и по умолчанию сжимаются с помощью ``gzip``. Примеры::
 | 
			
		||||
    Может содержать путь к локальному файлу или директории. Файлы архивируются при помощи ``tar`` и по умолчанию не сжимаются. Cжатие архива может быть включено через переменную `compression`. Примеры::
 | 
			
		||||
 | 
			
		||||
        /var/www/www-root/data
 | 
			
		||||
        file:/var/www/html
 | 
			
		||||
        file:///home/jhon/cool_stuff.txt
 | 
			
		||||
 | 
			
		||||
@@ -115,17 +114,17 @@ mysql
 | 
			
		||||
 | 
			
		||||
        mysql://[username[:password]@]hostname[:port]/database
 | 
			
		||||
 | 
			
		||||
    С помощью утилиты ``mysqldump``\(1) формируется дамп в формате SQL, файл по умолчанию сжимается утилитой ``gzip``.
 | 
			
		||||
    С помощью утилиты ``mysqldump``\(1) формируется дамп в формате SQL. Файл по умолчанию не сжимается, но сжатие может быть включено через переменную `compression`.
 | 
			
		||||
 | 
			
		||||
    См. также ``handler::mysqldump``
 | 
			
		||||
 | 
			
		||||
postgres
 | 
			
		||||
    Аналогично `mysql`, но для PostgreSQL. Для создания дампа используется ``pg_dump``\(1), файлы по умолчанию сохраняются с расширением .psql.gz.
 | 
			
		||||
    Аналогично `mysql`, но для PostgreSQL. Для создания дампа используется ``pg_dump``\(1) с расширением .psql. Файл по умолчанию не сжимается, но сжатие может быть включено через переменную `compression`.
 | 
			
		||||
 | 
			
		||||
    См. также ``handler::pg_dump``
 | 
			
		||||
 | 
			
		||||
sqlite
 | 
			
		||||
    Схема для баз данных SQLite. Ничем не отличается от `file`, добавлена для наглядного обозначения, что источником является БД SQLite, а не иной файл.
 | 
			
		||||
    Схема для баз данных SQLite. Мало отличается от `file`, добавлена для наглядного обозначения, что источником является БД SQLite, а не иной файл.
 | 
			
		||||
 | 
			
		||||
    См. также ``handler::sqlite``
 | 
			
		||||
 | 
			
		||||
@@ -133,7 +132,7 @@ sqlite
 | 
			
		||||
``````````````````````````````````````````````````
 | 
			
		||||
 | 
			
		||||
file
 | 
			
		||||
    В контексте `targets` указывает директорию для сохранения бэкапов. В массиве `targets` обязательно должен быть хотя бы один поинт со схемой `file`. Этот поинт будет использован как основной и сохранён в переменные ``__main_target`` (содержит URI) и ``__main_target_path`` (path). Если в массиве присутствует несколько поинтов со схемой `file`, то в качестве основного будет выбран первый по порядку поинт. Все бэкапы первоначально будут сохраняться в директорию ``__main_target_path`` и затем копироваться в другой таргет с помощью соответствующего обработчика. В случае копировани из одной директории в другую используется утилита ``cp``\(1).
 | 
			
		||||
    В контексте `targets` указывает директорию для сохранения бэкапов. В массиве `targets` обязательно должен быть хотя бы один поинт со схемой `file`. Этот поинт будет использован как основной и сохранён в переменные ``__main_target`` (содержит URI) и ``__main_target_path`` (содержит компонент URI path). Если в массиве присутствует несколько поинтов со схемой `file`, то в качестве основного будет выбран первый по порядку поинт. Все бэкапы первоначально будут сохраняться в директорию ``__main_target_path`` и затем копироваться в другой таргет с помощью соответствующего обработчика. В случае копировани из одной директории в другую используется утилита ``cp``\(1).
 | 
			
		||||
 | 
			
		||||
    Избегайте указания в одном сценарии таргетов, которые ведут одновременно на примонтированный к локальной машине сетевой диск и другое удалённое хранилище. В таком случае архивы будут создаваться на сетевом диске и далее снова копироваться по сети, что будет очень медленно.
 | 
			
		||||
 | 
			
		||||
@@ -165,11 +164,11 @@ dav, davs
 | 
			
		||||
 | 
			
		||||
boring-backup предполагает, что для всех резервных копий необходимо создавать архивы. Поэтому вам нужно следить за тем, чтобы в локальном хранилище всегда хватало дискового пространства для создания новых архивов. boring-backup также не удаляет старые архивы и вам также надо позаботиться об удалении устаревших резервных копий. Изменить это поведение можно с помощью пользовательских функций в сценариях. В этом разделе речь пойдёт о поведении, которое установлено по умолчанию. См. функции ``builtin_backup``, ``process_sources``, ``process_targets``.
 | 
			
		||||
 | 
			
		||||
Базовая концепция строится на том, что существует несколько точек источников и несколько точек назначения. Создаётся резервная копия источника и копируется в точку назначения.
 | 
			
		||||
Базовая концепция строится на том, что существует несколько источников и несколько точек назначения. Создаётся резервная копия источника и копируется в точку назначения.
 | 
			
		||||
 | 
			
		||||
Для всех источников в сценарии выполняется локальная резервная копия. После этого локальная копия переносится в удалённые точки назначения, если они заданы. Копирование локального бэкапа будет осуществлёно столько раз, сколько точек назначения задано. В каждом сценарии обязательно должен быть задан хотя бы один источник и одна точка назначения. При этом в списке точек назначения обязательно должна присутствовать точка со схемой `file`. Именно в неё будут сохранены архивы.
 | 
			
		||||
 | 
			
		||||
Пример. Имеется следующий сценарий::
 | 
			
		||||
Например, имеется следующий сценарий::
 | 
			
		||||
 | 
			
		||||
    sources=(
 | 
			
		||||
        'mysql://wordpress:1jobrRRjtLYs@localhost/wordpress'
 | 
			
		||||
@@ -212,80 +211,89 @@ WebDAV
 | 
			
		||||
``backups``
 | 
			
		||||
    Массив со списком созданных бэкапов. Содержит абсолютные пути к файлам. Заполняется функциями-обработчиками `sources`.
 | 
			
		||||
 | 
			
		||||
    Тип: массив
 | 
			
		||||
    Умолчание: ()
 | 
			
		||||
    | Тип: массив
 | 
			
		||||
    | Умолчание: ()
 | 
			
		||||
 | 
			
		||||
``errors``
 | 
			
		||||
    Массив с текстами ошибок. Заполняется функцией ``err`` с опцией ``-a``.
 | 
			
		||||
 | 
			
		||||
    Тип: массив
 | 
			
		||||
    Умолчание: ()
 | 
			
		||||
    | Тип: массив
 | 
			
		||||
    | Умолчание: ()
 | 
			
		||||
 | 
			
		||||
``log_date_fmt``
 | 
			
		||||
    Формат даты в логе. См. ``date``\(1).
 | 
			
		||||
 | 
			
		||||
    Тип: строка
 | 
			
		||||
    Умолчание: %d/%b/%Y:%H:%M:%S %z
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: %d/%b/%Y:%H:%M:%S %z
 | 
			
		||||
 | 
			
		||||
``name_prefix``
 | 
			
		||||
    Префикс имени файла. Может быть задан в скрипте.
 | 
			
		||||
 | 
			
		||||
    Тип: строка
 | 
			
		||||
    Умолчание: имя_скрипта\_
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: имя_скрипта\_
 | 
			
		||||
 | 
			
		||||
``name``
 | 
			
		||||
    Соответствует имени архивируемой директории/файла полученного из `path` с помощью утилиты ``basename``\(1).
 | 
			
		||||
 | 
			
		||||
    Тип: строка
 | 
			
		||||
    Умолчание: нет
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: нет
 | 
			
		||||
 | 
			
		||||
``name_date_fmt``
 | 
			
		||||
    Дата, интерпретируемая утилитой ``date``\(1).
 | 
			
		||||
 | 
			
		||||
    Тип: строка
 | 
			
		||||
    Умолчание: _%Y%m%d-%H%M
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: _%Y%m%d
 | 
			
		||||
 | 
			
		||||
``name_suffix``
 | 
			
		||||
    Суффикс, добавляемый к имени файла перед расширением. Строка интерпретируется утилитой ``date``.
 | 
			
		||||
    
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: -%H%M
 | 
			
		||||
 | 
			
		||||
``name_ext``
 | 
			
		||||
    Расширение имени файла, соответствующее формату архива.
 | 
			
		||||
 | 
			
		||||
    Тип: строка
 | 
			
		||||
    Умолчание: .tar.gz
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: .tar.gz
 | 
			
		||||
 | 
			
		||||
``tar_options``
 | 
			
		||||
    Опции ``tar``. См. ``tar``\(1).
 | 
			
		||||
 | 
			
		||||
    Тип: строка
 | 
			
		||||
    Умолчание: -acf
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: -acf
 | 
			
		||||
 | 
			
		||||
``tar_exclude``
 | 
			
		||||
    Список имён для опции ``tar`` ``--exclude``.
 | 
			
		||||
 | 
			
		||||
    Тип: массив
 | 
			
		||||
    Умолчание: нет
 | 
			
		||||
    | Тип: массив
 | 
			
		||||
    | Умолчание: нет
 | 
			
		||||
 | 
			
		||||
``compression``
 | 
			
		||||
    В контексте ``tar`` работа этой фичи базируется на опции ``tar`` ``--auto-compress``. Переменная может принимать значения, в соответствии с табилцей ниже. Если переменная имеет значение, отличное от перечисленныых, то будет использован ``gzip``.
 | 
			
		||||
    В контексте ``tar`` работа этой фичи базируется на опции ``tar`` ``--auto-compress``. Переменная может принимать значения, в соответствии с табилцей ниже. Если переменная имеет значение, отличное от перечисленныых, то будет использован ``gzip``. Если переменная пуста или не задана, то сжатие будет отключено.
 | 
			
		||||
    
 | 
			
		||||
    | Тип: строка
 | 
			
		||||
    | Умолчание: нет
 | 
			
		||||
 | 
			
		||||
    ======================== ================ ========
 | 
			
		||||
    Значение tar_compression Расширение файла Утилита
 | 
			
		||||
    ======================== ================ ========
 | 
			
		||||
    gzip, gz                 .tar.gz          gzip
 | 
			
		||||
    tgz                      .tgz             gzip
 | 
			
		||||
    taz                      .taz             gzip
 | 
			
		||||
    compress, Z              .tar.Z           compress
 | 
			
		||||
    taZ                      .taZ             compress
 | 
			
		||||
    bzip2, bz2               .tar.bz2         bzip2
 | 
			
		||||
    tz2                      .tz2             bzip2
 | 
			
		||||
    tbz2                     .tbz2            bzip2
 | 
			
		||||
    tbz                      .tbz             bzip2
 | 
			
		||||
    lzip, lz                 .tar.lz          lzip
 | 
			
		||||
    lzma                     .tar.lzma        lzma
 | 
			
		||||
    tlz                      .tlz             lzma
 | 
			
		||||
    lzop, lzo                .tar.lzo         lzop
 | 
			
		||||
    xz                       .tar.xz          xz
 | 
			
		||||
    zstd, zst                .tar.zst         zstd
 | 
			
		||||
    tzst                     .tzst            zstd
 | 
			
		||||
    ======================== ================ ========
 | 
			
		||||
    ==================== ================ ========
 | 
			
		||||
    Значение compression Расширение файла Утилита
 | 
			
		||||
    ==================== ================ ========
 | 
			
		||||
    gzip, gz             .tar.gz          gzip
 | 
			
		||||
    tgz                  .tgz             gzip
 | 
			
		||||
    taz                  .taz             gzip
 | 
			
		||||
    compress, Z          .tar.Z           compress
 | 
			
		||||
    taZ                  .taZ             compress
 | 
			
		||||
    bzip2, bz2           .tar.bz2         bzip2
 | 
			
		||||
    tz2                  .tz2             bzip2
 | 
			
		||||
    tbz2                 .tbz2            bzip2
 | 
			
		||||
    tbz                  .tbz             bzip2
 | 
			
		||||
    lzip, lz             .tar.lz          lzip
 | 
			
		||||
    lzma                 .tar.lzma        lzma
 | 
			
		||||
    tlz                  .tlz             lzma
 | 
			
		||||
    lzop, lzo            .tar.lzo         lzop
 | 
			
		||||
    xz                   .tar.xz          xz
 | 
			
		||||
    zstd, zst            .tar.zst         zstd
 | 
			
		||||
    tzst                 .tzst            zstd
 | 
			
		||||
    ==================== ================ ========
 | 
			
		||||
 | 
			
		||||
Функции
 | 
			
		||||
-------
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user