我编写了一个 bash 脚本,它将循环遍历 /data 目录并备份,然后使用 duplicity 加密所有卷。
我们发现其中一个应用程序正在生成大量我们不需要备份的大文件。所以我想找出一种方法来从脚本中排除这个子目录
backup_volume() { TARGET_DEVICE=$1
for vol in /data/*; do
VOLUME=$(basename $vol)
echo "Backing up $VOLUME on $TARGET_DEVICE/$VOLUME"
duplicity --file-prefix ${VOLUME}_ --full-if-older 1M /data/$VOLUME $TARGET_DEVICE/$VOLUME --allow-source-mismatch
--encrypt-key "Privbackup" --gpg-options "--batch --pinentry-mode loopback --trust-model always" || ERRORS="$ERRORS $vol>$TARGET_DEVICE"
duplicity --file-prefix ${VOLUME}_ remove-older-than 1M --force --encrypt-key "Privbackup" --gpg-options "--batch --pinentry-mode loopback --trust-model always" $TARGET_DEVICE/$VOLUME || ERRORS="$ERRORS $vol>$TARGET_DEVICE"
done
}
我曾尝试添加类似的东西
if [$vol = /data/dir1/dir2/dir3/]; then
continue
fi
但它似乎没有获取完整的相对目录....救命!
答案1
总结:考虑--exclude
从中选择duplicity
。
/data/*
将扩展到中的所有非隐藏文件/data
,这意味着它将输出:
/data/file1
/data/file2
/data/dir1
/data/dir2
它不会递归,所以它不会扩展为:
/data/dir1/file1
/data/dir1/dir2
您可以尝试一下printf '%s\n' /data/*
。
如果您希望它递归,请使用globstar
和**
:
shopt -s globstar
for vol in /data/**; done
[ "$vol" = "/data/dir1/dir2/dir3" ] && continue
...
done
# Unset globstar if you want:
shopt -u globstar
无论如何!您应该考虑--exclude
来自 的选项duplicity
。
duplicity --exclude /data/dir1/dir2/dir3