以下脚本备份目录/ var / www / sites中的所有网站,并为/ 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 or --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=$BAKPATHwebsite2.com)那样
@Alfe你想让我这样做吗?像这样:base=$(basename"$vhost*logs")还如何排除多个目录?
我看到它的方式,你在$ WEBROOT中为每个站点做tar。首先,我要验证$ vhost不是website2.com,根本不打算做tar。其次,您尝试排除的日志文件应为$ vhost / logs(无星标)。
@rkta不,我只是试过这个,但没有工作,它仍在备份所有( cd"$WEBROOT" && tar --exclude=$BAKPATH*logs --exclude=$BAKPATHwebsite2.com -cpzf"$BAKPATH$(date +%F)_$base.tar.gz""$base")
@AndreGelinas日志在网站下,所以BAKPATH / * / logs是正确的。
@Farmi,如果日志在网站下,那么它的WEBROOT / * /日志没有? ...和WEBROOT / *在for循环中实际上是$ vhost。我对--exclude的理解是你从源而不是目的地中排除。
@AndreGelinas是的,我也尝试过,但也没有工作:(
在从不同来源获得一些反馈之后,我能够通过在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
$BAKPATH是应该创建备份进程目标(存档,* .tgz文件)的位置。 如果要从源中排除某些内容,则必须在源中指定路径:
tar -cpz --exclude"$base/logs" \
-f"$BAKPATH/$(date +%F)_$base.tar.gz""$base"
这将排除所有匹配glob模式$base/logs的文件(以及下面的所有内容)。
根据你的问题,我认为你想要排除e。 G。 名为/var/www/websites/cardboardwebshop/logs/access.log的文件。 如果这不正确,请发表评论,也许我们可以弄清楚你需要写什么来排除你要排除的内容。
我想从所有网站中排除完整的varwwwwebsiteswebsite1.comlogs目录,还有一个网站本身也是我试过的网站2.com但它也失败了( cd"$WEBROOT" && tar -cpzf --exclude"$base*logs" --exclude"$basewebsite1.com" \ -f"$BAKPATH$(date +%F)_$base.tar.gz""$base")