Skip to content

Instantly share code, notes, and snippets.

@moritzheiber
Last active October 27, 2022 05:37
Show Gist options
  • Select an option

  • Save moritzheiber/76fb50d388b88950d74d to your computer and use it in GitHub Desktop.

Select an option

Save moritzheiber/76fb50d388b88950d74d to your computer and use it in GitHub Desktop.
Duplicity backup script
#!/bin/bash
#The MIT License (MIT)
#
#Copyright (c) 2014 Moritz Heiber <[email protected]>
#
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
#
#The above copyright notice and this permission notice shall be included in
#all copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
#
# There are a couple of variables you will want to change, i.e. ENCRYPT_KEY,
# LOG_LEVEL, ARCHIVE_DIR and, obviously, INCLUDE_DIRS (array) and SSH_URL.
# The syntax should be pretty self-explanatory.
LOG_FILE="/var/log/duplicity-backup.log"
LOG_LEVEL="INFO"
VOLSIZE="50"
ENCRYPT_KEY="XXXXXXXX"
ARCHIVE_DIR="/path/to/.cache/duplicity"
INCLUDE_ARRAY=("/some/dir" "some/other/dir")
SSH_URL="sftp://[email protected]/path/to/backup/location"
collect_dirs () {
for dir in ${INCLUDE_ARRAY[@]}; do
INCLUDE_STRING="${INCLUDE_STRING} --include ${dir}"
done
}
collect_dirs
duplicity incremental \
--full-if-older-than 1M \
--log-file ${LOG_FILE} \
--gpg-options "trust-model=always" \
-v${LOG_LEVEL} \
--encrypt-key ${ENCRYPT_KEY} \
--volsize ${VOLSIZE} \
--asynchronous-upload \
--archive-dir ${ARCHIVE_DIR} \
${INCLUDE_STRING} \
--exclude '**' \
/ \
${SSH_URL}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment