#!/bin/bash [ "${alias_dir}" = "" ] && alias_dir=$(pwd) source "${alias_dir}/common" backup_restore() { in_file=$1 in_dir=$1 [ "$in_file" = '' || "$in_dir" = '' ] && printf "Укажите файл для распаковки и директурию, куда распаковывать, например 'backup_restore backup.tgz /home'\n" && return printf "Произойдёт распаковка файла '$in_file' в папку '$in_dir'\n" ask_continue && return sudo tar xvpzf "$in_file" -C "$in_dir" } mkalias_with_prefix 'backup_restore' backup_delete_old_files_by_regex() { backup_dir=$1 file_regex=$2 file_max_count=$3 filter=$4 file_max_count=$((file_max_count+1)) # tail не так работает find "${backup_dir}" -regextype posix-extended -regex ".*${file_regex}" | grep -Ev "${filter}" | sort -r | tail -n +${file_max_count} | xargs -d '\n' rm -f } mkalias_with_prefix 'backup_delete_old_files_by_regex' # | grep -Ev "01d" # cur_date=$(date +%Yy_%mm_%dd) # '.*([^1])-zakonvremeni_backup.tar' # '.*1-zakonvremeni_backup.tar' backup_delete_old_files_by_date() { backup_dir=$1 file_name_template=$2 [[ "$backup_dir" == '' || "$file_name_template" == '' ]] && printf "Укажите имя папки и шаблон имени, например 'delete_old_backup_files_by_date backup/ host_name_@DATE.zip 3 4 5'. '@DATE' - означает дату в формате 'date +%%Yy_%%mm_%%dd', 3 - максимальное количество файлов сохраняемых ежедневно, 4 - ежемесячно, 5 - ежегодно\n" && return file_max_count_every_day=$3 file_max_count_every_month=$4 file_max_count_every_year=$5 by_week=$6 [[ "$file_max_count_every_day" == '' ]] && file_max_count_every_day=2 [[ "$file_max_count_every_month" == '' ]] && file_max_count_every_month=2 [[ "$file_max_count_every_year" == '' ]] && file_max_count_every_year=2 if [[ "$by_week" == "" ]]; then backup_delete_old_files_by_regex "${backup_dir}" "${file_name_template//'@DATE'/'.*'}" "${file_max_count_every_day}" 'm_01d|y_03m_01d' backup_delete_old_files_by_regex "${backup_dir}" "${file_name_template//'@DATE'/'.*m_01d.*'}" "${file_max_count_every_month}" 'y_03m_01d' backup_delete_old_files_by_regex "${backup_dir}" "${file_name_template//'@DATE'/'.*y_03m_01d.*'}" "${file_max_count_every_year}" '________NOTHONG___________' else backup_delete_old_files_by_regex "${backup_dir}" "${file_name_template//'@DATE'/'.*'}" "${file_max_count_every_day}" '1v-|11v-' backup_delete_old_files_by_regex "${backup_dir}" "${file_name_template//'@DATE'/'.*1v.*'}" "${file_max_count_every_month}" '11v-' backup_delete_old_files_by_regex "${backup_dir}" "${file_name_template//'@DATE'/'.*11v-.*'}" "${file_max_count_every_year}" '________NOTHONG___________' fi # test # for (( y = 2001; y < 2010; y++ )) do for (( m = 1; m < 10; m++ )) do for (( d = 1; d < 10; d++ )) do touch "backup_${y}y_0${m}m_0${d}d.zip"; backup_delete_old_files_by_date ./ "backup_@DATE\.zip" 2 2 2; sleep 0.15; done; done; done; # for (( y = 2001; y < 2010; y++ )) do for (( v = 10; v < 51; v++ )) do touch "backup_${y}y_01m_01d-${v}v-10H.zip"; backup_delete_old_files_by_date ./ "backup_@DATE\.zip" 2 2 2 week; sleep 0.15; done; done; } mkalias_with_prefix 'backup_delete_old_files_by_date' backup_date() { echo "$(date +%Yy_%mm_%dd-%Vv-%Hh_%Mm_%Ss)" } mkalias_with_prefix 'backup_date' backup_firefox() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return cd ~ file="${backup_dir}/$(hostname)_mozilla_backup_$(backup_date).tgz" tar cvpzf "${file}" \ --exclude=.mozilla/firefox/*.*/Cache \ .mozilla #--exclude=.mozilla/firefox/*.*/storage echo "${file}" } mkalias_with_prefix 'backup_firefox' backup_home() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return cd /home file="${backup_dir}/$(hostname)_home_backup_$(backup_date).tgz" sudo tar cvpzf "${file}" \ --exclude=*home_backup*.tgz \ --exclude=*/Загрузки/* \ --exclude=*/Backup/* \ --exclude=*/Музыка/* \ --exclude=MyProgs \ --exclude=media \ --exclude=private \ --exclude=.thumbnails \ --exclude=.mozilla/firefox/*.*/Cache \ --exclude=*/.cache/* \ --exclude=/.config/chromium/*/CacheStorage \ --exclude=*/.config/skypeforlinux/Cache \ --exclude=.local \ --exclude=.var/app/app.organicmaps.desktop/data \ --exclude=.steam \ --exclude=.smartgit/updates \ --exclude=.wine*/*/windows/ \ --exclude=.googleearth \ --exclude=*/.Genymobile \ --exclude=go/pkg \ --exclude=.apt \ --exclude=.npm \ --exclude=.gradle \ --exclude=Android \ --exclude=build/intermediates \ --exclude=build/*.obj \ . echo "${file}" } mkalias_with_prefix 'backup_home' backup_etc() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return cd / file="${backup_dir}/$(hostname)_sys_etc_backup_$(backup_date).tgz" sudo tar cvpzf "${file}" \ /etc echo "${file}" } mkalias_with_prefix 'backup_etc' backup_sys() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return cd / file="${backup_dir}/$(hostname)_sysbackup_$(backup_date).tgz" sudo tar cvpzf "${file}" \ --exclude=/*_sysbackup_*.tgz \ --exclude=/proc \ --exclude=/dev \ --exclude=/lost+found \ --exclude=/mnt \ --exclude=/run/media \ --exclude=/sys \ --exclude=/home \ --exclude=/media \ --exclude=/var/log \ --exclude=/var/cache \ --exclude=/var/lib/flatpak \ --exclude=/var/tmp \ --exclude=/usr/share \ --exclude=/tmp \ --exclude=/opt \ / echo "${file}" } mkalias_with_prefix 'backup_sys' backup_firefox_and_del_old_files() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return backup_host_dir="${backup_dir}/$(hostname)" mkdir "${backup_host_dir}" backup_ff_dir="${backup_host_dir}/firefox" mkdir "${backup_ff_dir}" backup_firefox "${backup_ff_dir}" backup_delete_old_files_by_date "${backup_ff_dir}" "_mozilla_backup_@DATE\.tgz" 2 2 2 week } mkalias_with_prefix 'backup_firefox_and_del_old_files' backup_home_and_del_old_files() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return backup_host_dir="$(pwd)/$(hostname)" mkdir "${backup_host_dir}" backup_home_dir="${backup_host_dir}/home" mkdir "${backup_home_dir}" backup_home "${backup_home_dir}" backup_delete_old_files_by_date "${backup_home_dir}" "_home_backup_@DATE\.tgz" 2 1 1 week } mkalias_with_prefix 'backup_home_and_del_old_files' backup_sys_and_del_old_files() { backup_dir=$1 [ "$backup_dir" = '' ] && printf "Укажите папку для бекапа\n" && return #ask_continue && return backup_host_dir="$(pwd)/$(hostname)" mkdir "${backup_host_dir}" backup_sys_dir="${backup_host_dir}/sys" mkdir "${backup_sys_dir}" backup_etc "${backup_sys_dir}" backup_delete_old_files_by_date "${backup_sys_dir}" "_sys_etc_backup_@DATE\.tgz" 3 3 3 } mkalias_with_prefix 'backup_sys_and_del_old_files'