备份bash脚本和tar排除日志和目录

时间:2018-07-16 13:46:26

标签: linux bash shell backup

以下脚本对目录/ 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

那么要生效吗?

2 个答案:

答案 0 :(得分:0)

$BAKPATH是应该在其中创建备份过程的 target (档案,*。tgz文件)的地方。如果要从 source 中排除某些内容,则必须在 source 中指定路径:

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

这将排除所有与全局模式$base/logs相匹配的文件(以及下面的所有内容)。

根据您的问题,我假设您要排除e。 G。一个名为/var/www/websites/cardboardwebshop/logs/access.log的文件。如果这是不正确的,请发表评论,也许我们可以弄清楚您到底要写什么才能排除您要排除的内容。

答案 1 :(得分:0)

从不同来源获得一些反馈后,我可以通过添加以下带有if条件的行来实现这一目标

mydf$date <- format(mydf$date, "%m/%d/%Y")
write.csv(mydf, file="path/to/file.csv")

所以,最终脚本看起来像这样

##ADD THIS
  if [[ $vhost = *"website1.com"* || $vhost = *"website2.co.uk"* ]]; then
  continue
  fi
##