metaoleg

Untitled

May 29th, 2012
491
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.46 KB | None | 0 0
  1. #!/bin/bash
  2. # a. Скрипт создаст в /home/user/ каталог с именем Backup-YYYY-MM-DD, где YYYY-MM-DD -дата запуска скрипта, если в /home/user/ нет каталога с именем, соответствующим дате, отстоящей от текущей менее чем на 7 дней. Если в /home/user/ уже есть «действующий» каталог резервного копирования (созданный не ранее 7 дней от даты запуска скрипта), то новый каталог не создается. Для определения текущей даты можно воспользоваться командой date.
  3. # b. Если новый каталог был создан, то скрипт скопирует в этот каталог все файлы из каталога /home/user/source/ (для тестирования скрипта создайте такую директорию и набор файлов в ней). После этого скрипт выведет в режиме дополнения в файл /home/user/backup-report следующую информацию: строка со сведениями о создании нового каталога с резервными копиями с указанием его имени и даты создания; список файлов из /home/user/source/, которые были скопированы в этот каталог.
  4. # c. Если каталог не был создан (есть «действующий» каталог резервного копирования), то скрипт должен скопировать в него все файлы из /home/user/source/ по следующим правилам: если файла с таким именем в каталоге резервного копирования нет, то он копируется из /home/user/source. Если файл с таким именем есть, то его размер сравнивается с размером одноименного файла в действующем каталоге резервного копирования. Если размеры совпадают, файл не копируется. Если размеры отличаются, то файл копируется с автоматическим созданием версионной копии, таким образом, в действующем каталоге резервного копирования появляются обе версии файла (уже имеющийся файл переименовывается путем добавления дополнительного расширения «. YYYY-MM-DD» (дата запуска скрипта), а скопированный сохраняет имя). После окончания копирования в файл /home/user/backup-report выводится строка о внесении изменений в действующий каталог резервного копирования с указанием его имени и даты внесения изменений, затем строки, содержащие имена добавленных файлов с новыми именами, а затем строки с именами добавленных файлов с существовавшими в действующем каталоге резервного копирования именами с указанием через пробел нового имени, присвоенного предыдущей версии этого файла.
  5.  
  6. backupDir="./backup/"
  7. sourceDir="./source/"
  8. backupReport="./backup-report.txt"
  9. backupPrefix="Backup-"
  10. newDir=0
  11. M_OK="~Wet Summer Days~"
  12. M_MLP_PINKIEPIE_WATCH_OUT="Soooo.... Watch out!"
  13. todayDate=$(date +%F)
  14. todaySec=$(date --date=$todayDate +%s)
  15. lastestBackupDir=$(ls $backupDir | grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" | sort -r -k1 | head -1);
  16. lastestBackupSec=$(date --date=$(ls $backupDir | grep -Eo "[0-9]{4}-[0-9]{2}-[0-9]{2}" | sort -r -k1 | head -1) +%s)
  17. let dateDiff=($todaySec\-$lastestBackupSec)\/60\/60\/24
  18.  
  19. if [ $dateDiff -le 7 ];
  20. then
  21.     currentBackupDir=$backupDir$lastestBackupDir"/";
  22. else
  23.     mkdir $backupDir$backupPrefix$todayDate
  24.     currentBackupDir=$backupDir$backupPrefix$todayDate"/"
  25.     newDir=1
  26. fi
  27.  
  28. echo "Everypony quiet."
  29.  
  30. if [ "$newDir" == "1" ];
  31. then
  32.     echo "Backup created on "$todayDate" in directory "$sourceDir" Files copied:" >> $backupReport
  33.     for file in $(ls $sourceDir);
  34.     do
  35.         cp $sourceDir$file $currentBackupDir$file
  36.         echo $file >> $backupReport
  37.     done
  38. else
  39.     echo "Updating backup in directory "$currentBackupDir". Date: "$todayDate" Changes:" >> $backupReport
  40.     for file in $(ls $sourceDir);
  41.     do
  42.         maybe=$currentBackupDir$file
  43.         if [[ -f $maybe ]];
  44.         then
  45.             source_size=$(stat $sourceDir$file -c%s)
  46.             actual_size=$(stat $maybe -c%s)
  47.             if [[ "$source_size" != "$actual_size" ]];
  48.             then
  49.                 mv $maybe $maybe"."$todayDate
  50.                 cp $sourceDir$file $maybe
  51.                 echo "New version of file "$file" found. Old version moved to "$file"."$todayDate >> $backupReport
  52.             fi
  53.         else
  54.             cp $sourceDir$file $maybe
  55.             echo "New file '"$file"' copied" >> $backupReport
  56.         fi
  57.     done
  58. fi
  59.  
  60. echo $M_OK
  61.  
  62. exit 1
Advertisement
Add Comment
Please, Sign In to add comment