linux日志备份目录,关于linux:备份bash脚本和tar排除日志和目录

以下脚本备份目录/ 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")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值