Skip to content

Instantly share code, notes, and snippets.

@Kanst
Last active August 29, 2015 14:08
Show Gist options
  • Save Kanst/90457dc1727e6c064303 to your computer and use it in GitHub Desktop.
Save Kanst/90457dc1727e6c064303 to your computer and use it in GitHub Desktop.
#!/bin/bash
## Default
ignore_errors='no'
## Default
usage() {
cat<<HELP
SYNOPSIS
$0 [ OPTIONS ]
OPTIONS
-p,
Путь до каталога с файлами.
Пример: -p /home/user/tmp
-i,
Игнорировать ошибки, возникающие при архивировании каталога
и при подсчете md5sum. Например, при отстуствии прав на некоторые файлы
Пример: -i yes
-h
Вывести это сообщение
HELP
exit 0
}
if [ $# -lt 1 ]
then
echo "Нет опций. Exit 1"
usage && exit 1
fi
while getopts "p:hi:" opt; do
case $opt in
h)
usage && exit 1
;;
p)
path=$OPTARG
;;
i)
ignore_errors=$OPTARG
;;
\?)
usage && exit 1
;;
esac
done
# Проверка существования указанного пути
if [ ! -d $path ]
then
echo 'Указанного пути не существует. Exit 1'
exit 1
fi
dt=`date +%d-%m-%Y-%H-%M`
if [ ! -d $dt ];
then
# Создается каталог в текущем пути. При ошибке выводится сообщение и завершиется программа
mkdir $dt 2>/dev/null
if [ $? -ne 0 ]
then
echo "pwd: `pwd`"
echo 'Невозможно создать каталог по указанному пути. Exit 1'
exit 1
fi
else
# Возникает, если запускать скрипт несколько раз в минуту. Можно поменять формат даты. Либо указывать в формате timestamp
echo "Невозможно создать каталог. Он существует: $dt. Exit 1"
exit 1
fi
tar_tmp_err=`mktemp`
tar -uf $dt/archive.tar $path 2>$tar_tmp_err
if [ $? -ne 0 ] && [ $ignore_errors == 'no' ]
then
echo 'Работа tar завершилась с ошибкой'
# Это могло произойти из-за нехватки прав к некоторым файлам
while true
do
read -p "Вывести ошибки выполнения tar? [Yy/Nn] " yn
case $yn in
[Yy]* ) cat $tar_tmp_err; break;;
[Nn]* ) echo 'Exit 1'; rm -rf $dt $tar_tmp_err; exit 1;;
* ) echo 'Введите, пожалуйста, y или n'
esac
done
# Если ошибки можно проигнорировать, то продолжаем работу
while true
do
read -p "Продолжить работу? [Yy/Nn] " yn
case $yn in
[Yy]* ) break;;
[Nn]* ) echo 'Exit 1'; rm -rf $dt $tar_tmp_err; exit 1;;
* ) echo 'Введите, пожалуйста, y или n'
esac
done
fi
rm -f $tar_tmp_err
md5_tmp_err=`mktemp`
find $path -type f -exec md5sum "{}" \; 1>$dt/md5.txt 2>$md5_tmp_err
if [ -s $md5_tmp_err ] && [ $ignore_errors == 'no' ]
then
echo 'Работа m5sum завершилась с ошибкой'
while true
do
read -p "Вывести ошибки выполнения md5sum? [Yy/Nn] " yn
case $yn in
[Yy]* ) cat $md5_tmp_err; break;;
[Nn]* ) echo 'Exit 1'; rm -rf $dt $md5_tmp_err; exit 1;;
* ) echo 'Введите, пожалуйста, y или n'
esac
done
# Если ошибки можно проигнорировать, то продолжаем работу
while true
do
read -p "Продолжить работу? [Yy/Nn] " yn
case $yn in
[Yy]* ) echo 'Ok'; break;;
[Nn]* ) echo 'Exit 1'; rm -rf $dt $md5_tmp_err; exit 1;;
* ) echo 'Введите, пожалуйста, y или n'
esac
done
fi
rm -f $md5_tmp_err
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment