backup-scripts/fake-zfs.sh
2025-04-16 08:16:09 +00:00

86 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
META="/home/user/scripts/zfs_meta.data"
mkdir -p "$(dirname "$META")"
touch "$META"
get_value() {
local prop="$1"
local dataset="$2"
awk -v section="[$dataset]" -v key="$prop" '
$0 == section { in_section = 1; next }
in_section && $0 ~ /^\[/ { exit }
in_section && $0 ~ "^"key"=" {
print substr($0, index($0, "=") + 1)
exit
}
' "$META"
}
set_value() {
local prop="$1"
local value="$2"
local dataset="$3"
local tmp=$(mktemp)
awk -v section="[$dataset]" -v key="$prop" -v val="$value" '
BEGIN { in_section = 0; keyfound = 0 }
{
if ($0 == section) { in_section = 1 }
else if ($0 ~ /^\[/) { in_section = 0 }
if (in_section && $0 ~ "^"key"=") {
print key "=" val
keyfound = 1
next
}
print
}
END {
if (!keyfound) {
if (!in_section) print section
print key "=" val
}
}
' "$META" > "$tmp"
mv "$tmp" "$META"
}
list_names() {
grep "^\[" "$META" | tr -d '[]'
}
case "$1" in
get)
PROP="$2"
DATASET="$3"
VALUE=$(get_value "$PROP" "$DATASET")
VALUE=${VALUE:-"-"}
if [[ "$4" == "-o" && "$5" == "value" && "$6" == "-H" ]]; then
echo "$VALUE"
elif [[ "$4" == "-o" && "$5" == "value" ]]; then
echo "VALUE"
echo "$VALUE"
else
echo "NAME PROPERTY VALUE SOURCE"
printf "%-15s %-18s %-17s local\n" "$DATASET" "$PROP" "$VALUE"
fi
;;
set)
IFS="=" read PROP VALUE <<< "$2"
DATASET="$3"
set_value "$PROP" "$VALUE" "$DATASET"
;;
list)
if [[ "$2" == "-o" && "$3" == "name" ]]; then
list_names
fi
;;
*)
echo "fake-zfs.sh: unsupported command $1" >&2
exit 1
;;
esac