Last active
August 29, 2015 14:08
-
-
Save Kanst/90457dc1727e6c064303 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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