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

标签 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 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 是应该创建备份过程的目标(存档,*.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 的文件。如果这不正确,请评论,也许我们可以弄清楚您到底需要写什么来排除您想要排除的内容。

关于linux - 备份 bash 脚本和 tar 排除日志和目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51363382/

相关文章:

linux - 在 linux bash 脚本中有足够空间时复制文件

php - 如何将 PHP 数组传递给 BASH 脚本?

c++ - 如何在 QML 中播放视频?

linux bash - 以自定义格式解析日期

linux - linux 中接口(interface)的特定接口(interface)名称

c - C中的fwide函数是什么

linux - 用存储在sed变量中的文件内容替换两行之间的文本

linux - slurm SBATCH - 多个节点,相同的 SLURMD_NODENAME

regex - 带有正则表达式裁剪文本的 grep

linux - 进入Gentoo,执行equery等gentoo命令