diff options
author | Andrew Cady <d@jerkface.net> | 2023-06-03 12:55:35 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2023-06-05 17:08:35 -0400 |
commit | 329db17935912541b98e6f8bbcb2a0bb162cc190 (patch) | |
tree | bfc9ac65a794133ee7b995f750473a278a2ef354 | |
parent | 2e63131bd66385647cde81fb1e9a9f285d539694 (diff) |
list-all-subvolumes to list all subvolumes
-rwxr-xr-x | list-all-subvolumes | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/list-all-subvolumes b/list-all-subvolumes new file mode 100755 index 0000000..89ffc15 --- /dev/null +++ b/list-all-subvolumes | |||
@@ -0,0 +1,30 @@ | |||
1 | #!/bin/bash | ||
2 | set -e -o pipefail | ||
3 | btrfs_subvolume_list_args=('-sr') | ||
4 | btrfs_subvolume_list_args=('-a' "$@") | ||
5 | |||
6 | list_all_subvolumes() | ||
7 | { | ||
8 | for dev in $(list_btrfs) | ||
9 | do | ||
10 | [ -b "$dev" ] || return | ||
11 | d=/run/btrfs-temp-mount/$(systemd-escape "$dev") | ||
12 | ( | ||
13 | mkdir -p "$d" | ||
14 | trap 'umount "$d"; rmdir "$d"' EXIT | ||
15 | set -x | ||
16 | mountpoint -q "$d" || mount -o ro,subvol=/ "$dev" "$d" || return | ||
17 | btrfs subvolume list "$@" "$d" | ||
18 | ) || return | ||
19 | done | ||
20 | } | ||
21 | |||
22 | list_btrfs() | ||
23 | { | ||
24 | mount -t btrfs | while read | ||
25 | do | ||
26 | printf '%s\n' "${REPLY%% *}" | ||
27 | done | sort -u | ||
28 | } | ||
29 | |||
30 | list_all_subvolumes "${btrfs_subvolume_list_args[@]}" | ||