Lakika
@Lakika
Sicario

Как исключить из копирования всей папки, одну папку на .bash?

Здравствуйте.
Подскажите пожалуйста, написал скрипт, который делает бэкап сайта и базы;
Но столкнулся с проблемой, в папке с файлами сайта, есть папки и файлы, и есть одна папка, которую нельзя удалять, и она как бы в архиве бэкапа не нужна. Как ее исключить?

Скрипт мой выглядит вот так:
Как-то так

#!/bin/sh
 
FULLTIME=`date +%d-%b-%H-%M`
DATETIME=`date +%d-%m-%g`
SITE_PATH=/var/www/html/www/mysite/
BACKUP_DIR=/root/backup
ARCHIVE=/root/archive/$FULLTIME.7z

USER=log
PASS="pass"
DB=base
ARC_PASS='pass'

cd /var/www/html/
mkdir $BACKUP_DIR
echo "FileSite"
cp -r $SITE_PATH $BACKUP_DIR/FileSite
echo ""
echo "mysql"
mysqldump -u $USER -p$PASS $DB > $BACKUP_DIR/mysql.sql
echo ""
echo "packing"
7z a -p$ARC_PASS -mx=9 -t7z $ARCHIVE $BACKUP_DIR
echo ""
echo "cleaning"
rm -rf $BACKUP_DIR 
echo "LastFile"
find /root/archive/ -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1 $lastFileName
sleep 1
echo ""
rclone copy /root/archive/$lastFileName pCloud:Back/Site
sleep 10
echo "ClearLastFile"
rm -rf $ARCHIVE $lastFileName
echo "done"



Суть логики, как я ее сделал:
Создаем переменные, а далее, создаем папку в которой будем хранить бэкапы, создаем временную папку, копируем туда файлы сайта + базу мускуля, далее упаковываем это все в архив (одновременно ставя на архив пароль) и уже после упаковки, сливаем архив в облако, и удаляем его, после себя чистим все;

Вопрос, как исключить одну не нужную папку в главной директории сайта? Весит много, даже копировать во временную папку ее нельзя;
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 4
@pfg21
ex-турист
используй опцию исключения 7z -x (Exclude filenames) switch
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега Linux
Батенька сразу несколько замечаний.
1. Базу дампим желательно через эвал, поскольку пароль может содержать как " так и ' так и { короче нужно извращаться
eval "$(echo "mysqldump --no-tablespaces -u$DBLOGIN -p'$DBPASS' $DBNAME -h$DBHOST > $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql  && echo "Дамп БД $DBNAME будет сохранен в корне сайта"  ||  echo "Ошибка дампа базы данных " $DBNAME")"

2.
А зачем собственно вы храните это все на сервере, не проще сразу заливать в потоке на нужное место.
Из плюсов все плюсы заливки 1 файла поскольку он в канале архивный.
и плюсы все пофайловового копирования поскольку там уже лежит или распакованый если нужн или запакованый сайт.

сейчас поищу где-то уменя были старые файлики похожие.

SITEDIR="/home/bitrix/ext_www"                      # Папка до названия доменаов
DBCONN="bitrix/php_interface/dbconn.php"            # Откуда читать настройки mysql
FTPUSER="backup_ftp"                                # Логин FTP сервера
FTPPASS="1111111"                        # Пароль FTP
FTPHOST="11.154.209.177"                           # сервер FTP
FTPDIR=""                                           # папка на FTP
TMPDIR="/mnt/backup/site"                           # тут временный файл лежит до отправки
TMPWPUTBASE="/mnt/backup"                            # wput подставит эту папку как базовую
DATE=`date +"%Y-%m-%d"`                             # Формат даты в имени файла
DATEYM=`date +%Y`/`date +%m`                        # Второй форматы даты
LIST=${1:-`ls $SITEDIR | grep -E ".*\.\w{1,5}" | grep -v "restore.php" | grep -v "klondike.php"`} # Название сайта, тут выбор или аргумент или, регулярка  можно убрать только -L ;)

mkdir -p $TMPDIR/$DATEYM # создаем  структ уру каталогов если их нет

for ELEMENT in $LIST
    do
                if [ ! -f /$SITEDIR/$ELEMENT/$DBCONN ];
                        then
                            echo " Файл $SITEDIR/$ELEMENT/$DBCONN не найден, сайт будет без БД!"
                        else

DBLOGIN=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBLogin}\");")
DBNAME=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBName}\");")
DBPASS=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBPassword}\");")
DBHOST=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBHost}\");")
echo "Найдена BD $ELEMENT"
echo ""
echo "Login: $DBLOGIN"
echo "DB   : $DBNAME"
echo "Pass : $DBPASS"
echo "Host : $DBHOST"
echo ""
echo "Дамп БД $DBNAME"

# только через эвал и эхо смогли экранировать все  пароли
eval "$(echo "mysqldump --no-tablespaces -u$DBLOGIN -p'$DBPASS' $DBNAME -h$DBHOST > $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql  && echo "Дамп БД $DBNAME будет сохранен в корне сайта"  ||  echo "Ошибка дампа базы данных " $DBNAME")"
chown bitrix:bitrix $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql
               fi

echo "Считаем количество Файлов  на сайте"
#SIZE=" $(find $SITEDIR/$ELEMENT/$WEB | wc -l)" && echo " В архиве будет $SIZE файлов"
SIZE="$(find $SITEDIR/$ELEMENT/$WEB -not -path "$SITEDIR/$ELEMENT/bitrix/tmp/*" -not -path "$SITEDIR/$ELEMENT/bitrix/updates/*" -not -path "$SITEDIR/$ELEMENT/dev_logs/*" -not -path "$SITEDIR/$ELEMENT/upload/1c_import_light/logs/*" -not -path "$SITEDIR/$ELEMENT/upload/1c_import_light/total_errors/*" -not -path "$SITEDIR/$ELEMENT/.git/*" -not -path "$SITEDIR/$ELEMENT/bitrix/catalog_export/logs/*" -not -path "$SITEDIR/$ELEMENT/bitrix/backup/*" -not -path "$SITEDIR/$ELEMENT/bitrix/cache/*" -not -path "$SITEDIR/$ELEMENT/bitrix/managed_cache/*" -not -path "$SITEDIR/$ELEMENT/bitrix/stack_cache/*" -not -path "$SITEDIR/$ELEMENT/upload/resize_cache/*" -not -path "$SITEDIR/$ELEMENT/stats/*" | wc -l)" && echo " В архиве будет $SIZE файлов"


echo "Архивируем сайт $ELEMENT прогресс не в килобайтах а в  количестве файлов"

  tar -cvpzf $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz --directory $SITEDIR/$ELEMENT/$WEB --ignore-failed-read --exclude='./bitrix/tmp' --exclude='./bitrix/updates'  --exclude='./dev_logs' --exclude='./upload/1c_import_light/logs' --exclude='./upload/1c_import_light/total_errors' --exclude='./.git' --exclude='./bitrix/catalog_export/logs'  --exclude='./bitrix/backup'  --exclude='./bitrix/cache' --exclude='./bitrix/managed_cache' --exclude='./bitrix/stack_cache' --exclude='./upload/resize_cache' --exclude='./stats' . | pv -s $SIZE -l > /dev/null


echo $ELEMENT


# >> /dev/nool 2> /var/log/backup_error.log
        rm -f $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql # поскльку ложим на реальный сайт, ибо нормально добавить в архив не получитяс.

        echo "Сохраняем $ELEMENT на FTP"

        wput --basename=$TMPWPUTBASE -p    --no-directories      $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR && echo "Архив залит успешно, временные файлы удалены"
>> /dev/nool 2> /var/log/backup_error.log
 #       rm -f $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz
echo -en "\n\033[37;1;41m Ссылочка:\033[0m \e[1;4;36mwget ftp://$FTPUSER:$FTPPASS@$FTPHOST/site/$DATEYM/$ELEMENT-$DATE.tar.gz\e[0m\n\n" #ks05

  done


  if [ -n "$(cat /etc/nginx/bx/site_enabled/bx_ext_ssl_bike-centre.ru.conf | grep ^ssl_certificate )" ] ; then
       echo "        Найдены активные сертификаты SSL"

       cat /etc/nginx/bx/site_enabled/bx_ext_ssl_bike-centre.ru.conf | grep --perl-regexp "^ssl_certificate\s+.*\.pem" | grep  --perl-regexp -o  /.+[^\;]
       cat /etc/nginx/bx/site_enabled/bx_ext_ssl_bike-centre.ru.conf | grep --perl-regexp "^ssl_certificate_key.*\.pem" | grep  --perl-regexp -o  /.+[^\;]
wput  -u --basename=/etc/ /etc/letsencrypt/live/bike-centre.ru/ ftp://backup_ftp:QWaszx123@178.154.209.177/etc_backup/
   # тут в телегу 
curl --socks5-basic \-X POST https://api.telegram.org/bot5320773503:************/sendMessage -d chat_id=-676521809  -d \text="Backup site bike-centre.ru OK "

Может что-то из этого покажется полезным
скрипт запускается так scrypt.sh site.ru
если просто то все сайты бэкапятся, соответственно кажыдй со своей базой со своим названием.
Но тут не в потоке. о этом тут писал. https://klondike-studio.ru/blog/bystro-skopirovat-...
Так же БД можно заливать сразу на удаленый сервер, притом уже архивную.

Ну и как исключить я вам тут показал.
Ответ написан
Комментировать
@Goshin
администрирование всего
rsync ........ с ключем --exclude вместо cp
или не копировать, а сразу делать архив tar - ом, там тоже есть exclude
Ответ написан
Комментировать
Lakika
@Lakika Автор вопроса
Sicario
Сильно, я еще столько переменных не видел)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы