helper-scripts/backup-helper.fish
2024-06-11 13:39:29 +02:00

71 lines
2.1 KiB
Fish
Executable File

#!/run/current-system/sw/bin/fish
set BKG_DIR $BKG_DIR
set EXCLUDE_APPS $EXCLUDE_APPS
set EXCLUDE_VOLUMES $EXCLUDE_VOLUMES
set EXCLUDE_CLEANUP $EXCLUDE_CLEANUP
set DAYS $DAYS # how many days should daily backups be stored
set DF $DF # folder name for daily backups
set WF $WF # folder name for weekly backups
set MF $MF # folder name for monthly backups
set MBD $MBD # day of month for monthly backup
set WBD $WBD # weekday for weekly backups
set PV $PV # folder name for podman volumes
set PODMAN_VOLUMES (podman volume ls --format '{{.Name}}') # if you are using docker just replace the podman command with the docker command
if not test -d $BKG_DIR
mkdir $BKG_DIR
end
cd $BKG_DIR
# Podman volume backup
if not test -d $BKG_DIR/$PV
mkdir $BKG_DIR/$PV
end
for vol in $PODMAN_VOLUMES
if contains $vol $EXCLUDE_VOLUMES
continue
end
cd $BKG_DIR/$PV
podman volume export $vol --output $vol.tar ; gzip $vol.tar
# If you are using docker things look a bit more complicated / comment the podman line and uncomment the following
# docker run --rm -v .:/backup -v $vol:/$vol busybox sh -c "cd /$vol && tar cf /backup/$vol.tar . && gzip /backup/$vol.tar"
end
set BACKUP_APPS (fd . -td -d 1 $BKG_DIR)
# App backup
for bkg in $BACKUP_APPS
if contains $bkg $EXCLUDE_APPS
continue
end
cd $bkg
#monthly
if not test -d $MF
mkdir $MF
end
set DOM (date +%d)
if test $DOM -eq $MBD
fd . -tf -d 1 -x cp {/} $MF/(date +"%Y%m")-{/}
end
#weekly
if not test -d $WF
mkdir $WF
end
set DOW (date +%u)
if test $DOW -eq $WBD
fd . -tf -d 1 -x cp {/} $WF/(date +"%U%Y")-{/}
end
#dailies
if not test -d $DF
mkdir $DF
end
fd . -tf -d 1 -x mv {/} $DF/(date +"%Y%m%d")-{/}
end
# Delete old backups
for bkg in $BACKUP_APPS
if contains $bkg $EXCLUDE_CLEANUP
continue
end
fd . $bkg$DF --changed-before $DAYS"d" -X rm
fd . $bkg$WF --changed-before "4w" -X rm
fd . $bkg$MF --changed-before "8w" -X rm
end