下面的脚本备份目录/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
是备份进程的目标(归档文件,*.tgz文件(的创建位置。如果你想从源中排除一些东西,你必须在来源:中指定路径
tar -cpz --exclude "$base/logs"
-f "$BAKPATH/$(date +%F)_$base.tar.gz" "$base"
这将排除所有与glob模式$base/logs
匹配的文件(以及下面的所有文件(。
根据你的问题,我假设你想排除一个名为/var/www/websites/cardboardwebshop/logs/access.log
的文件。如果这不正确,请发表评论,也许我们可以弄清楚你到底需要写什么来排除你想排除的内容。
在从不同来源获得一些反馈后,我能够通过添加以下带有if条件的行来实现这一点
##ADD THIS
if [[ $vhost = *"website1.com"* || $vhost = *"website2.co.uk"* ]]; then
continue
fi
##
所以,最后脚本看起来像这个
WEBROOT="/var/www/websites"
BAKPATH="/var/backup"
for vhost in "$WEBROOT"/*; do
test -d "$vhost" || continue
if [[ $vhost = *"website1.com"* || $vhost = *"website2.co.uk"* ]]; then
continue
fi
base=$(basename "$vhost")
( cd "$WEBROOT" && tar -cpzf "$BAKPATH/$(date +%F)_$base.tar.gz" "$base" )
done