A quick script to remove files matching pattern from rsnapshot backups
Needed to free up some disk space and identified some files which had been backed up, but which I'll never need, so cooked up this quick little script to loop through all the backup directories (daily.0, daily.1, etc) and purge files matching a regex, while logging each one for the record.
base=/var/backups/rsnapshot
dir=path/to/dir/
file="*SomeFile*"
log=rsnap.cleanup.log
for d in $(ls $base); do
echo $(date "+%F %T") processing directory $base/$d | tee -a $log
find $base/$d/$dir | egrep "*$file*" |
while read f; do
echo $(date "+%F %T") removing file: >> $log
ls -li "$f" >> $log
rm "$f"
done
done
Example output:
2012-11-20 10:58:48 processing directory /var/backups/rsnapshot/daily.0
2012-11-20 10:58:48 processing directory /var/backups/rsnapshot/daily.1
2012-11-20 10:58:48 processing directory /var/backups/rsnapshot/daily.2
2012-11-20 10:58:51 processing directory /var/backups/rsnapshot/daily.3
2012-11-20 10:58:53 processing directory /var/backups/rsnapshot/daily.4
2012-11-20 10:58:56 processing directory /var/backups/rsnapshot/daily.5
2012-11-20 10:58:58 processing directory /var/backups/rsnapshot/daily.6
2012-11-20 10:59:01 processing directory /var/backups/rsnapshot/monthly.0
2012-11-20 10:59:04 processing directory /var/backups/rsnapshot/monthly.1
2012-11-20 10:59:07 processing directory /var/backups/rsnapshot/monthly.10
2012-11-20 10:59:09 processing directory /var/backups/rsnapshot/monthly.2
2012-11-20 10:59:11 processing directory /var/backups/rsnapshot/monthly.3
2012-11-20 10:59:13 processing directory /var/backups/rsnapshot/monthly.4
2012-11-20 10:59:16 processing directory /var/backups/rsnapshot/monthly.5
2012-11-20 10:59:18 processing directory /var/backups/rsnapshot/monthly.6
2012-11-20 10:59:20 processing directory /var/backups/rsnapshot/monthly.7
2012-11-20 10:59:23 processing directory /var/backups/rsnapshot/monthly.8
2012-11-20 10:59:25 processing directory /var/backups/rsnapshot/monthly.9
2012-11-20 10:59:27 processing directory /var/backups/rsnapshot/weekly.0
2012-11-20 10:59:31 processing directory /var/backups/rsnapshot/weekly.1
2012-11-20 10:59:33 processing directory /var/backups/rsnapshot/weekly.3
2012-11-20 10:59:36 processing directory /var/backups/rsnapshot/yearly.0
2012-11-20 10:59:38 processing directory /var/backups/rsnapshot/yearly.1
Log will contain stuff like:
2012-11-20 10:58:23 processing directory /var/backups/rsnapshot/daily.0
2012-11-20 10:58:23 removing file:
2290475698 -rw-rw-r-- 1 1003 1007 136353642 2012-06-28 20:13 /var/backups/rsnapshot/daily.0/path/to/dir/SomeFile.1
2012-11-20 10:58:23 removing file:
2290475644 -rw-rw-r-- 1 1003 1007 318410539 2012-11-19 20:13 /var/backups/rsnapshot/daily.0//path/to/dir/SomeFile.2
...
2 Comments
1. Tamadite replies at 5th February 2013, 3:07 pm :
Thanks for sharing this script!
I have used it to delete backup entries on a QNAP NAS. I tailored my own backup solution based on rsnapshot.
I had to modify the script to get it to work under QNAP. egrep was not 100% compatible.
MODIFY
egrep “*$file*”
TO
egrep “$file”
MODIFY
file=”*SomeFile*”
TO
file=”SomeFile”
In order to be able to delete folders, which is what I was looking for, I modified the removing command
MODIFY
rm “$f”
TO
rm -r “$f”
A side effect of doing simply so is that the screen and the log get filled with all content of the directory when actually the main entry should be enough.
2. ian replies at 13th November 2014, 8:34 pm :
Whoops! I backed up a huge directory with rsnapshot by mistake, and didn’t notice for a few weeks.
I came here via google, but ended up doing instead since I didn’t need a log:
find . -type d | grep /some/path/ | xargs rm -rf
Leave a comment