linux - 备份 bash 脚本和 tar 排除日志和目录
问题描述
以下脚本备份目录 /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
. 如果这不正确,请发表评论,也许我们可以弄清楚您需要写什么来排除您想要排除的内容。
推荐阅读
- regex - 正则表达式测试函数。可视化代码
- c - 是否允许在分配的内存区域中以非 sizeof 偏移量创建对象?
- python - TensorFlow 模型创建后抛出尺寸错误
- php - 如何使用准备好的语句将带有 if 语句的数组传递给 MySQL 查询?
- python - 带有 Python 的 git 命令
- amazon-web-services - DynamoDb 表中静态加密和客户端加密的优缺点是什么
- java - Java - 黄瓜标签排除不起作用
- java - 有没有办法复制矩阵但具有不同的索引?
- php - MySQL中的PHP变量[选择或]语句未执行
- javascript - 当我使用反应路由重新加载具体页面时,我的应用程序崩溃了