【发布时间】:2018-12-24 02:14:16
【问题描述】:
以下脚本会备份目录 /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
但是,我需要从备份中排除日志文件夹和一个网站,就像我们通常使用 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?不应该是像"$vhost/*/logs"这样的东西吗?另请注意,这将作为 模式 给出,因此您必须引用星号的用法。 -
@rkta 是的,我尝试过这样做,但效果不像
( cd "$WEBROOT" && tar -cpzf "$BAKPATH/$(date +%F)_$base.tar.gz" "$base" --exclude=$BAKPATH/*/logs --exclude=$BAKPATH/website2.com) -
@Alfe 你想让我在哪里做这个?像这样:
base=$(basename "$vhost/*/logs")也如何排除多个目录? -
在我看来,您正在为 $WEBROOT 中的每个单独站点执行 tar。首先,我将验证 $vhost 不是 website2.com 并且根本不费心去做 tar。其次,您要排除的日志文件应该是 $vhost/logs(没有星号)。
-
@rkta 不,我刚刚尝试过但没有成功,它仍在备份所有内容
( cd "$WEBROOT" && tar --exclude=$BAKPATH/*/logs --exclude=$BAKPATH/website2.com -cpzf "$BAKPATH/$(date +%F)_$base.tar.gz" "$base")