mirror of
https://git.sr.ht/~magic_rb/dotfiles
synced 2024-12-01 20:46:12 +01:00
52 lines
1.1 KiB
Bash
52 lines
1.1 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# SPDX-FileCopyrightText: 2022 Richard Brežák <richard@brezak.sk>
|
||
|
#
|
||
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||
|
|
||
|
zfs_src="${1}"
|
||
|
dst_dir="${2}"
|
||
|
|
||
|
function recurse_children()
|
||
|
{
|
||
|
local volume="${1}"
|
||
|
local dir="${2}"
|
||
|
local relmount="${3}"
|
||
|
|
||
|
for child in $children
|
||
|
do
|
||
|
if [ "${child}" == "${volume}" ]
|
||
|
then
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
mount_wc "${child}" "${dir}/$(basename "${child}")"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function mount_wc()
|
||
|
{
|
||
|
local volume="${1}"
|
||
|
local dir="${2}"
|
||
|
|
||
|
local relmount="$(zfs get -Ho value :relmount "${volume}")"
|
||
|
local children="$(zfs list -Hrd 1 "${volume}" -o name | tr '\n' ' ')"
|
||
|
|
||
|
if ! [ -z "${relmount}" ] && [ "${relmount}" != "-" ]
|
||
|
then
|
||
|
case "${relmount}" in
|
||
|
"yes")
|
||
|
mount -o X-mount.mkdir -t zfs "${volume}" "${dir}"
|
||
|
recurse_children "${volume}" "${dir}" "${relmount}"
|
||
|
;;
|
||
|
"pass")
|
||
|
recurse_children "${volume}" "${dir}" "${relmount}"
|
||
|
;;
|
||
|
"*")
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
mount_wc "${zfs_src}" "${dst_dir}"
|