Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # a. Скрипт создаст в /home/user/ каталог с именем Backup-YYYY-MM-DD, где YYYY-MM-DD -дата запуска скрипта, если в /home/user/ нет каталога с именем, соответствующим дате, отстоящей от текущей менее чем на 7 дней. Если в /home/user/ уже есть «действующий» каталог резервного копирования (созданный не ранее 7 дней от даты запуска скрипта), то новый каталог не создается. Для определения текущей даты можно воспользоваться командой date.
- # b. Если новый каталог был создан, то скрипт скопирует в этот каталог все файлы из каталога /home/user/source/ (для тестирования скрипта создайте такую директорию и набор файлов в ней). После этого скрипт выведет в режиме дополнения в файл /home/user/backup-report следующую информацию: строка со сведениями о создании нового каталога с резервными копиями с указанием его имени и даты создания; список файлов из /home/user/source/, которые были скопированы в этот каталог.
- # c. Если каталог не был создан (есть «действующий» каталог резервного копирования), то скрипт должен скопировать в него все файлы из /home/user/source/ по следующим правилам: если файла с таким именем в каталоге резервного копирования нет, то он копируется из /home/user/source. Если файл с таким именем есть, то его размер сравнивается с размером одноименного файла в действующем каталоге резервного копирования. Если размеры совпадают, файл не копируется. Если размеры отличаются, то файл копируется с автоматическим созданием версионной копии, таким образом, в действующем каталоге резервного копирования появляются обе версии файла (уже имеющийся файл переименовывается путем добавления дополнительного расширения «. YYYY-MM-DD» (дата запуска скрипта), а скопированный сохраняет имя). После окончания копирования в файл /home/user/backup-report выводится строка о внесении изменений в действующий каталог резервного копирования с указанием его имени и даты внесения изменений, затем строки, содержащие имена добавленных файлов с новыми именами, а затем строки с именами добавленных файлов с существовавшими в действующем каталоге резервного копирования именами с указанием через пробел нового имени, присвоенного предыдущей версии этого файла.
- backupDir="./backup/"
- sourceDir="./source/"
- backupReport="./backup-report.txt"
- backupPrefix="Backup-"
- newDir=0
- M_OK="~Wet Summer Days~"
- M_MLP_PINKIEPIE_WATCH_OUT="Soooo.... Watch out!"
- todayDate=$(date +%F)
- todaySec=$(date --date=$todayDate +%s)
- lastestBackupDir=$(ls $backupDir | grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" | sort -r -k1 | head -1);
- lastestBackupSec=$(date --date=$(ls $backupDir | grep -Eo "[0-9]{4}-[0-9]{2}-[0-9]{2}" | sort -r -k1 | head -1) +%s)
- let dateDiff=($todaySec\-$lastestBackupSec)\/60\/60\/24
- if [ $dateDiff -le 7 ];
- then
- currentBackupDir=$backupDir$lastestBackupDir"/";
- else
- mkdir $backupDir$backupPrefix$todayDate
- currentBackupDir=$backupDir$backupPrefix$todayDate"/"
- newDir=1
- fi
- echo "Everypony quiet."
- if [ "$newDir" == "1" ];
- then
- echo "Backup created on "$todayDate" in directory "$sourceDir" Files copied:" >> $backupReport
- for file in $(ls $sourceDir);
- do
- cp $sourceDir$file $currentBackupDir$file
- echo $file >> $backupReport
- done
- else
- echo "Updating backup in directory "$currentBackupDir". Date: "$todayDate" Changes:" >> $backupReport
- for file in $(ls $sourceDir);
- do
- maybe=$currentBackupDir$file
- if [[ -f $maybe ]];
- then
- source_size=$(stat $sourceDir$file -c%s)
- actual_size=$(stat $maybe -c%s)
- if [[ "$source_size" != "$actual_size" ]];
- then
- mv $maybe $maybe"."$todayDate
- cp $sourceDir$file $maybe
- echo "New version of file "$file" found. Old version moved to "$file"."$todayDate >> $backupReport
- fi
- else
- cp $sourceDir$file $maybe
- echo "New file '"$file"' copied" >> $backupReport
- fi
- done
- fi
- echo $M_OK
- exit 1
Advertisement
Add Comment
Please, Sign In to add comment