Browse Source

Backup and sync

master
parent
commit
44ab3e600e
  1. 15
      Backup/2sync
  2. 31
      Backup/2sync_all
  3. 42
      Backup/GetDelFileList
  4. 19
      Backup/MakeFirefoxBackup
  5. 51
      Backup/MakeHomeBackup
  6. 45
      Backup/MakeSystemBackup
  7. 3
      Backup/RestoreBackup
  8. 1
      Script/alias_main
  9. 75
      Script/backup
  10. 50
      Script/sync

15
Backup/2sync

@ -1,15 +0,0 @@
#!/bin/bash
# Двухсторонняя синхронизация
# Использование:
# ./2sync src dest [opt1] [opt2]
src=$1
dest=$2
opt1=$3
opt2=$4
rsync -r -t -v $opt1 $opt2 --progress -s --omit-dir-times $src $dest
rsync -r -t -v $opt1 $opt2 --progress -s --omit-dir-times $dest $src

31
Backup/2sync_all

@ -1,31 +0,0 @@
#!/bin/bash
# Двухсторонняя синхронизация с сервером всех объектов в текущей папке
# Использование:
# ./2sync_all filter dest_base opt1 opt2
# filter - маска по файлам
# dest_base - базовый путь для синхронизации, может содержать сервер, например: backup@www_server:/media/Backup
# opt1,2 - дополнительные опции rsync.
# Примеры:
# 1. Опция "-n" для теста
# 2. Опция "--delete" для удаления файлов
filter=$1
dest_base=$2
opt1=$3
opt2=$4
files=`ls -p | grep / | grep ${filter} |sort`
cur_dir="$(pwd)/"
for file in $files; do
src="${cur_dir}/${file}/"
dest="${dest_base}/${file}/"
./2sync $src $dest $opt1 $opt2
done

42
Backup/GetDelFileList

@ -1,42 +0,0 @@
#!/bin/bash
# -------------Входные параметры---------------
# Максимальное колличество файлов, которое должно остаться
maxFilesCount=$1
# Набор файлов, первые из которых будут удалены
files=$2
# -------------Выходной параметр---------------
# Файлы, которые нужно удалить
delFiles=""
# ---------------------------------------------
# Вычисляем колличество файлов
filesCount=0
for i in $files
do
let filesCount++
done
# Записываем файлы для удаления в переменную delFiles
if [ $maxFilesCount -lt $filesCount ]
then
delFilesIndex=0
let delFilesCount=filesCount-maxFilesCount
for i in $files
do
if [ $delFilesIndex -lt $delFilesCount ]
then
delFiles=`echo -en "${delFiles}\n${i}"`
fi
let delFilesIndex++
done
fi
echo $delFiles

19
Backup/MakeFirefoxBackup

@ -1,19 +0,0 @@
#!/bin/bash
# Делает бэкап папки ~/.mozilla
# Использование:
# ./MakeFirefoxBackup backup_dir
backup_dir=$1
if [ "$backup_dir" == "" ]; then
backup_dir="."
fi
# Делаем бекап
cd ~
tar cvpzf "${backup_dir}/$(hostname)_mozilla_backup_$(date +%yy%mm%dd-%Hh%Mm%Ss).tgz" \
--exclude=.mozilla/firefox/*.*/Cache \
.mozilla
#--exclude=.mozilla/firefox/*.*/storage \

51
Backup/MakeHomeBackup

@ -1,51 +0,0 @@
#!/bin/bash
# Делает бэкап папки /home
# Использование:
# ./MakeHomeBackup backup_dir
backup_dir=$1
if [ "$backup_dir" == "" ]; then
backup_dir="/home"
fi
maxFilesCount=3
# Выясняем, какие старые архивы нам нужно удалить
files=`find ${backup_dir}/*home_backup_*|sort`
delFiles=`./GetDelFileList $maxFilesCount "${files}"`
# Делаем бекап
cd /home
sudo tar cvpzf "${backup_dir}/$(hostname)_home_backup_$(date +%yy%mm%dd-%Hh%Mm%Ss).tgz" \
--exclude=*home_backup*.tgz \
--exclude=.thumbnails \
--exclude=.mozilla/firefox/*.*/storage \
--exclude=*/.cache/* \
--exclude=*/Загрузки/* \
--exclude=*/Backup/* \
--exclude=*/Музыка/* \
--exclude=.cache \
--exclude=/.config/chromium/*/CacheStorage \
--exclude=*/.config/skypeforlinux/Cache \
--exclude=.local \
--exclude=.var/app/app.organicmaps.desktop/data \
--exclude=media \
--exclude=.steam \
--exclude=.smartgit/updates \
--exclude=.wine*/*/windows/ \
--exclude=.googleearth \
--exclude=*/.Genymobile \
--exclude=*/3D_Model/assets \
--exclude=private \
--exclude=MyProgs \
--exclude=go/pkg \
--exclude=.apt \
--exclude=.npm \
--exclude=.gradle \
.
# Удаляем старые архивы
for i in $delFiles
do
sudo rm $i
done

45
Backup/MakeSystemBackup

@ -1,45 +0,0 @@
#!/bin/bash
# Делает бэкап папки /
# Использование:
# ./MakeSysBackup backup_dir
backup_dir=$1
if [ "$backup_dir" == "" ]; then
backup_dir="/"
fi
maxFilesCount=3
# Выясняем, какие старые архивы нам нужно удалить
files=`find ${backup_dir}/*sysbackup_*|sort`
delFiles=`./GetDelFileList $maxFilesCount "${files}"`
cd /
sudo tar cvpzf "${backup_dir}/$(hostname)_sys_etc_backup_$(date +%yy%mm%dd-%Hh%Mm%Ss).tgz" \
/etc
sudo tar cvpzf "${backup_dir}/$(hostname)_sysbackup_$(date +%yy%mm%dd-%Hh%Mm%Ss).tgz" \
--exclude=/proc \
--exclude=/dev \
--exclude=/lost+found \
--exclude=/*sysbackup*.tgz \
--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 \
/
# Удаляем старые архивы
for i in $delFiles
do
sudo rm $i
done

3
Backup/RestoreBackup

@ -1,3 +0,0 @@
#!/bin/bash
sudo tar xvpzf $1 -C /

1
Script/alias_main

@ -14,5 +14,6 @@ source "${alias_dir}/parse_arg_lib"
source "${alias_dir}/img_and_wav2video"
source "${alias_dir}/nmap"
source "${alias_dir}/backup"
source "${alias_dir}/sync"

75
Script/backup

@ -39,27 +39,41 @@ backup_delete_old_files_by_date()
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___________'
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()
{
return $(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_$(date +%Yy_%mm_%dd-%Hh_%Mm_%Ss).tgz"
file="${backup_dir}/$(hostname)_mozilla_backup_$(backup_date).tgz"
tar cvpzf "${file}" \
--exclude=.mozilla/firefox/*.*/Cache \
.mozilla
@ -75,7 +89,7 @@ backup_home()
#ask_continue && return
cd /home
file="${backup_dir}/$(hostname)_home_backup_$(date +%Yy_%mm_%dd-%Hh_%Mm_%Ss).tgz"
file="${backup_dir}/$(hostname)_home_backup_$(backup_date).tgz"
sudo tar cvpzf "${file}" \
--exclude=*home_backup*.tgz \
--exclude=*/Загрузки/* \
@ -105,27 +119,46 @@ backup_home()
}
mkalias_with_prefix 'backup_home'
backup_()
backup_etc()
{
in_dir=$1
[ "$in_dir" = '' ] && printf "\n" && return
ask_continue && return
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_'
mkalias_with_prefix 'backup_etc'
backup_()
backup_sys()
{
in_dir=$1
[ "$in_dir" = '' ] && printf "\n" && return
ask_continue && return
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_'
mkalias_with_prefix 'backup_sys'
backup_()
{
in_dir=$1
[ "$in_dir" = '' ] && printf "\n" && return
ask_continue && return
}
#mkalias_with_prefix 'backup_'

50
Script/sync

@ -0,0 +1,50 @@
#!/bin/bash
[ "${alias_dir}" = "" ] && alias_dir=$(pwd)
source "${alias_dir}/common"
sync_2dir()
{
# Двухсторонняя синхронизация
# Использование:
# ./2sync src dest [opt1] [opt2]
src=$1
dest=$2
opt1=$3
opt2=$4
rsync -r -t -v $opt1 $opt2 --progress -s --omit-dir-times $src $dest
rsync -r -t -v $opt1 $opt2 --progress -s --omit-dir-times $dest $src
}
mkalias_with_prefix 'sync_2dir'
sync_by_filter()
{
# Двухсторонняя синхронизация с сервером всех объектов в текущей папке
# Использование:
# sync_by_filter filter dest_base opt1 opt2
# filter - маска по файлам
# dest_base - базовый путь для синхронизации, может содержать сервер, например: backup@www_server:/media/Backup
# opt1,2 - дополнительные опции rsync.
# Примеры:
# 1. Опция "-n" для теста
# 2. Опция "--delete" для удаления файлов
filter=$1
dest_base=$2
opt1=$3
opt2=$4
files=`ls -p | grep / | grep ${filter} |sort`
cur_dir="$(pwd)/"
for file in $files; do
src="${cur_dir}/${file}/"
dest="${dest_base}/${file}/"
sync_2dir $src $dest $opt1 $opt2
done
}
mkalias_with_prefix 'sync_by_filter'
Loading…
Cancel
Save