以下脚本将备份目录/var/www/websites中的所有网站,并在/var/backup为每个单独的网站创建.tar.gz,运行良好

WEBROOT="/var/www/websites"
BAKPATH="/var/backup"

for vhost in "$WEBROOT"/*; do
  test -d "$vhost" || continue
  base=$(basename "$vhost")
  ( cd "$WEBROOT" && tar -cpzf "$BAKPATH/$(date +%F)_$base.tar.gz" "$base" )
done

但是,我需要从备份中排除logs文件夹和一个网站,就像我们通常用tar排除一样
--exclude=$BAKPATH/*/logs或--exclude=$BAKPATH/website2.com
我不知道放在哪里?我试着跟着但没用
WEBROOT="/var/www/websites"
BAKPATH="/var/backup"

for vhost in "$WEBROOT"/*; do
  test -d "$vhost" || continue
  base=$(basename "$vhost")
  ( cd "$WEBROOT" && tar -cpzf "$BAKPATH/$(date +%F)_$base.tar.gz --exclude=$BAKPATH/*/logs --exclude=$BAKPATH/website2.com" "$base")
done

我应该把它放在哪里
--exclude=$BAKPATH/*/logs--exclude=$BAKPATH/website2.com
所以它生效了?

最佳答案

$BAKPATH是应该创建备份进程目标(归档文件,*.tgz文件)的位置。如果要从源中排除某些内容,则必须指定源中的路径:

tar -cpz --exclude "$base/logs" \
    -f "$BAKPATH/$(date +%F)_$base.tar.gz" "$base"

这将排除与glob模式匹配的所有文件(以及下面的所有文件)。
根据你的问题,我假设你想排除一个名为$base/logs的文件。如果这是不正确的,请评论,也许我们可以找出你到底需要写什么来排除你想排除的。

关于linux - 备份bash脚本和tar排除日志和目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51363382/

10-16 09:24