Как сжать несколько папок, чтобы разделить другие папки и tar.gz - PullRequest
0 голосов
/ 10 апреля 2020

Как мне сжать файлы в этом сценарии:

У меня есть структура папок, подобная этой:

Пользователь1:

/home/user1/websites/website1
/home/user1/websites/website2

Пользователь2:

/home/user2/websites/website1
/home/user2/websites/website2
/home/user2/websites/website3

И я сейчас пытаюсь (нужно) сделать резервное копирование следующим образом:

Папки для резервных копий на пользователя:

/backup/date/websites/user1/
/backup/date/websites/user1/

И мне нужно резервное копирование tar в каталоге пользователя отдельно для каждого веб-сайта, как это :

/backup/date/websites/user1/website1.tar.gz
/backup/date/websites/user1/website2.tar.gz
/backup/date/websites/user2/website1.tar.gz
/backup/date/websites/user2/website2.tar.gz
/backup/date/websites/user2/website3.tar.gz

У меня есть такой скрипт, чтобы выполнить половину этой работы:

#VARIABLES
BKP_DATE=`date +"%F"`
BKP_DATETIME=`date +"%H-%M"`

#BACKUPS FOLDERS
BKP_DEST=/backup/users
BKP_DEST_DATE=$BKP_DEST/$BKP_DATE
BKP_DEST_TIME=$BKP_DEST_DATE/$BKP_DATETIME
BACKUP_DIR=$BKP_DEST_TIME

#NUMBER OF DAYS TO KEEP ARCHIVES IN BACKUP DIRECTORY
KEEP_DAYS=7

#Create folders
mkdir -p $BKP_DEST_DATE
mkdir -p $BKP_DEST_TIME
mkdir -p $BACKUP_DIR

#DELETE FILES OLDER THAN {*} DAYS IN BACKUP SERVER DIRECTORY
#echo 'Deleting backup folder older than '${KEEP_DAYS}' days'
find $BKP_DEST/* -type d -ctime +${KEEP_DAYS} -exec rm -rf {} \;

#Do backups
#List only names available users data directories
usersdirectories=`cd /home && find * -maxdepth 0 -type d | grep -Ev "(tmp|root)"`

#Creating directories per user name
for i in $usersdirectories; do
  mkdir -p $BACKUP_DIR/$i/websites
done

Но если вы видите, я не знаю, как сделать это для tar отдельно архивы. В своей половине сценария я сделал:

  1. Создание структуры папок для резервного копирования по дате и времени (/ backup / users / day / hour-minutes)
  2. Создание структуры папок для резервного копирования по именам пользователей (/ backup / users / day / hour-minutes / user1)

Спасибо всем пользователям, которые пытаются мне помочь!

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

Я попытаюсь завершить ваш сценарий, но я не могу отладить его, потому что ваше окружение сложно воспроизвести. В будущем будет лучше, если вы предоставите минимальный воспроизводимый пример.

#VARIABLES
BKP_DATE=$(date +"%F")
BKP_DATETIME=$(date +"%H-%M")

#BACKUPS FOLDERS
BKP_DEST=/backup/users
BKP_DEST_DATE=$BKP_DEST/$BKP_DATE
BKP_DEST_TIME=$BKP_DEST_DATE/$BKP_DATETIME
BACKUP_DIR=$BKP_DEST_TIME

#NUMBER OF DAYS TO KEEP ARCHIVES IN BACKUP DIRECTORY
KEEP_DAYS=7

#Create folders
mkdir -p $BKP_DEST_DATE
mkdir -p $BKP_DEST_TIME
mkdir -p $BACKUP_DIR

#DELETE FILES OLDER THAN {*} DAYS IN BACKUP SERVER DIRECTORY
#echo 'Deleting backup folder older than '${KEEP_DAYS}' days'
find $BKP_DEST/* -type d -ctime +${KEEP_DAYS} -exec rm -rf {} \;

#Do backups
#List only names available users data directories
usersdirectories=$(cd /home && find * -maxdepth 0 -type d | grep -Ev "(tmp|root)")

#Creating directories per user name
for i in $usersdirectories; do
  for w in $(/home/$i/websites/*); do
    ws=$(basename $w)
    mkdir -p $BACKUP_DIR/$i/websites/$ws
    tar -czvf $BACKUP_DIR/$i/websites/$ws.tar.gz /home/$i/websites/$ws
  done
done

Полагаю, что внутри имен каталогов нет пробелов website1, et c ...

Я также заменил устаревшие операторы обратных кодов вашего кода на $( ... ).

0 голосов
/ 14 апреля 2020

Хорошо, после небольшого исправления. Версия от Пьера работает сейчас. Если хотите, вы можете настроить его под свои нужды.

#VARIABLES
BKP_DATE=$(date +"%F")
BKP_DATETIME=$(date +"%H-%M")

#BACKUPS FOLDERS
BKP_DEST=/backup
BKP_DEST_DATE=$BKP_DEST/$BKP_DATE
BKP_DEST_TIME=$BKP_DEST_DATE/$BKP_DATETIME
BACKUP_DIR=$BKP_DEST_TIME

#NUMBER OF DAYS TO KEEP ARCHIVES IN BACKUP DIRECTORY
KEEP_DAYS=7

#Create folders
mkdir -p $BKP_DEST_DATE
mkdir -p $BKP_DEST_TIME
mkdir -p $BACKUP_DIR

#DELETE FILES OLDER THAN {*} DAYS IN BACKUP SERVER DIRECTORY
#echo 'Deleting backup folder older than '${KEEP_DAYS}' days'
find $BKP_DEST/* -type d -ctime +${KEEP_DAYS} -exec rm -rf {} \;

#Do backups
#List only names available users data directories
usersdirectories=$(cd /home/user && find * -maxdepth 0 -type d | grep -Ev "(tmp|root)")

#Creating directories per user name
for i in $usersdirectories; do
  for w in /home/user/$i/*; do
    #echo ok
    ws=$(basename $w)
    echo mkdir -p $BACKUP_DIR/$i
    echo tar -czvf $BACKUP_DIR/$i/$ws.tar.gz /home/user/$i/$ws
  done
done
0 голосов
/ 10 апреля 2020

Я sh Я мог бы прокомментировать, чтобы попросить больше разъяснений, но я постараюсь помочь вам.

#!/bin/bash

# example for user1
archive_path=/backup/data/websites/user1
file_path=/home/user1/websites/*

for i in $file_path
do
  tar czf $archive_path/$(basename $i).tar.gz $file_path
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...