Last active
May 8, 2019 17:11
-
-
Save jamesmcallister/aebefd47ee6ced1bbc71aac7048f64e8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Setting this, so the repo does not need to be given on the commandline: | |
# export BORG_REPO=ssh://[email protected]:2022/~/backup/main | |
export BORG_REPO=/run/media/james/64gb/backup | |
# Setting this, so you won't be asked for your repository passphrase: | |
# export BORG_PASSPHRASE='XYZl0ngandsecurepa_55_phrasea&&123' | |
# or this to ask an external program to supply the passphrase: | |
export BORG_PASSCOMMAND='pass show backup' | |
# some helpers and error handling: | |
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } | |
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM | |
info "Starting backup" | |
# Backup the most important directories into an archive named after | |
# the machine this script is currently running on: | |
borg create \ | |
--verbose \ | |
--filter AME \ | |
--list \ | |
--stats \ | |
--show-rc \ | |
--compression lz4 \ | |
--exclude-caches \ | |
--exclude '/home/*/.cache/*' \ | |
--exclude '/var/cache/*' \ | |
--exclude '/var/tmp/*' \ | |
--exclude '/*/Trash/*' \ | |
--exclude '/home/*/.npm/*' \ | |
--exclude '/home/*/.config/google-chrome/*' \ | |
--exclude '/home/*/.config/Code/*' \ | |
--exclude '/home/*/.pnpm-store/*' \ | |
--exclude '/home/*/.cache/*' \ | |
--exclude '/*/node_modules' \ | |
--exclude '/var/lib/docker/*' \ | |
\ | |
::'{hostname}-{now}' \ | |
/etc \ | |
/home \ | |
/root \ | |
/var \ | |
/boot | |
backup_exit=$? | |
info "Pruning repository" | |
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly | |
# archives of THIS machine. The '{hostname}-' prefix is very important to | |
# limit prune's operation to this machine's archives and not apply to | |
# other machines' archives also: | |
borg prune \ | |
--list \ | |
--prefix '{hostname}-' \ | |
--show-rc \ | |
--keep-daily 7 \ | |
--keep-weekly 4 \ | |
--keep-monthly 6 \ | |
prune_exit=$? | |
# use highest exit code as global exit code | |
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) | |
if [ ${global_exit} -eq 1 ]; | |
then | |
info "Backup and/or Prune finished with a warning" | |
fi | |
if [ ${global_exit} -gt 1 ]; | |
then | |
info "Backup and/or Prune finished with an error" | |
fi | |
exit ${global_exit} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sudo rsync -abviuzP \ | |
--exclude node_modules/ \ | |
--exclude .npm \ | |
--exclude .pnpm-store \ | |
--exclude .cache/ \ | |
--exclude .config/Code \ | |
--exclude .config/google-chrome \ | |
~/ /run/media/james/64gb/rsync \ | |
--dry-run |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment