42 lines
736 B
Plaintext
42 lines
736 B
Plaintext
![]() |
#!/bin/sh
|
||
|
|
||
|
usage () {
|
||
|
cat <<EOF>&2
|
||
|
Usage: ${0##*/}
|
||
|
|
||
|
Snapshot all Btrfs subvolumes older than 1 day to a read-only '.snapshots/SUBVOLUME/DATE'.
|
||
|
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
if [ $# -ne 0 ]; then
|
||
|
usage
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
while IFS= read -r fs; do
|
||
|
for subvol in private public; do
|
||
|
last=$(ls -1 .snapshots/"$subvol" | tail -1 | sed 's/_/ /')
|
||
|
if [ -z "$last" ]; then
|
||
|
continue
|
||
|
fi
|
||
|
last_date=$(date --date="$last" +%s)
|
||
|
now=$(date +%s)
|
||
|
if [ $(($now - $last_date)) -gt 86400 ]; then
|
||
|
choice=N
|
||
|
echo -n "==> Snapshot '$fs/${subvol}'? (y/N) "
|
||
|
read -r choice
|
||
|
case "$choice" in
|
||
|
Y|y)
|
||
|
btrfs-snap "$fs/$subvol" ;;
|
||
|
esac
|
||
|
unset choice
|
||
|
fi
|
||
|
unset now
|
||
|
unset last_date
|
||
|
unset last
|
||
|
done
|
||
|
done <<EOF
|
||
|
$(findmnt -t btrfs -n --output TARGET)
|
||
|
EOF
|