summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2023-06-03 12:55:35 -0400
committerAndrew Cady <d@jerkface.net>2023-06-05 17:08:35 -0400
commit329db17935912541b98e6f8bbcb2a0bb162cc190 (patch)
treebfc9ac65a794133ee7b995f750473a278a2ef354
parent2e63131bd66385647cde81fb1e9a9f285d539694 (diff)
list-all-subvolumes to list all subvolumes
-rwxr-xr-xlist-all-subvolumes30
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
2set -e -o pipefail
3btrfs_subvolume_list_args=('-sr')
4btrfs_subvolume_list_args=('-a' "$@")
5
6list_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
22list_btrfs()
23{
24 mount -t btrfs | while read
25 do
26 printf '%s\n' "${REPLY%% *}"
27 done | sort -u
28}
29
30list_all_subvolumes "${btrfs_subvolume_list_args[@]}"