Исключить каталоги из архивации TAR

Рейтинг: 3Ответов: 1Опубликовано: 24.02.2023

Есть скрипт, который архивирует файлы и каталоги. Как исключить определённые каталоги для архивации? Так, как сделано у меня сейчас - не работает...

tar -cjpvf $BACKUP/$FILE $DIRS --exclude={'/domain/www','/domain/07122021'} > $LOGDIR/$NOW-full.log

и

find $DIRS -type f -mtime -1 -print0 | tar -cjpvf $BACKUP/$FILE --null --exclude={'/domain/www','/domain/07122021'} -T - > $LOGDIR/$NOW-ink.log

Так же, может подскажете, как прописать, что бы папка с годом создавалась сама в директории FTPD="backup/". А то сейчас приходится каждый раз вручную создавать папку с нужным годом....

Полный код скрипта

#!/bin/sh
# System backup script
# Full backup day - Sun (rest of the day do incremental backup)
# ---------------------------------------------------------------------

### System Setup ###
# Короткое название папки (используется для формирования имен)
DIRSHORT="dbs"
# Папка для бэкапа
DIRS="/domain"
# Временная папка (в нее будут архивироваться файлы)
BACKUP=/home/backup/temp/backup.$$
LOGDIR=/home/backup/logs
# формат даты для имен (можно не менять)
NOW=$(date +"%d-%m-%Y")
NOWYEAR=$(date +"%Y")
# Файл с информацией о инкрементальных копиях
INCFILE="/home/backup/inkrement/$DIRSHORT-tar-inc-backup.dat"
# текущий день недели (не менять)
#DAY=$(date +"%a")
DAY=$(LC_TIME=en_US.UTF-8 date +"%a");
# день недели полного бэкапа
FULLBACKUP="Fri"


### FTP server Setup ###
# папка на FTP
FTPD="backup/"
# имя пользователя FTP
FTPU="****"
# Паароль FTP
FTPP="****"
# Сервер FTP
FTPS="10.0.0.5"
#NCFTP="$(which ncftpput)"

### Other stuff ###
EMAILID="user@gmail.com"

#Начало бекапа
### Start Backup for file system ###
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :

### See if we want to make a full backup ###
i=$(date +"%Hh%Mm%Ss")

if [ "$DAY" = "$FULLBACKUP" ]; then
datedir=$NOWYEAR
FILE="$DIRSHORT-full-$NOW-$i.tar.bz2"
# Архивировать всю папку исключая SQUID-reports
tar -cjpvf $BACKUP/$FILE $DIRS --exclude={'/domain/www','/domain/07122021'} > $LOGDIR/$NOW-full.log
else
datedir=$NOWYEAR
FILE="$DIRSHORT-ink-$NOW-$i.tar.bz2"
#Если файл был изменен по срвнению с предыдущим днем - архивировать
find $DIRS -type f -mtime -1 -print0 | tar -cjpvf $BACKUP/$FILE --null --exclude={'/domain/www','/domain/07122021'} -T - > $LOGDIR/$NOW-ink.log
fi


### Dump backup using FTP ###
#Start FTP backup using ncftp
echo "Ftp upload start"

# temp files
ftpcommand="/home/backup/temp/$DIRSHORT-com.ftp"
ftplog="/home/backup/temp/$DIRSHORT-log.ftp"

# ftp script
echo "cd $FTPD
mkdir $NOWYEAR
cd $NOWYEAR
lcd $BACKUP
mput *
quit" > $ftpcommand

# execute ftp script
/usr/bin/ncftp -u$FTPU -p$FTPP $FTPS > $ftplog < $ftpcommand


### Find out if ftp backup failed or not ###
if [ "$?" = "0" ]; then
echo "Ftp upload end ok"
rm -rf $BACKUP
else
echo "Ftp upload end error"
T=/home/backup/backup.fail
echo "Date: $(date)">$T
echo "Hostname: $(hostname)" >>$T
echo "$DIRSHORT Backup failed" >>$T
echo "ftpout:" >> $T
cat $ftplog >> $T
mail -s "BACKUP FAILED" "$EMAILID" <$T
rm -f $T
fi 

Спасибо!

Ответы

▲ 1Принят

Необходимо указывать исключения сразу после tar

tar --exclude=/domain/www/ --exclude=/domain/07122021/ -cjpvf $BACKUP/$FILE $DIRS > $LOGDIR/$NOW-full.log

и

find $DIRS -type f -mtime -1 -print0 | tar --exclude=/domain/www/ --exclude=/domain/07122021/ -cjpvf $BACKUP/$FILE --null -T - > $LOGDIR/$NOW-ink.log