diff --git a/rumount b/rumount new file mode 100755 index 0000000..9d65746 --- /dev/null +++ b/rumount @@ -0,0 +1,42 @@ +#!/bin/bash +# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS + +function display_help() { + uecho "$scriptname: démonter un système de fichier récursivement + +USAGE + $scriptname mountpoint + +Démonter tous les systèmes de fichiers qui sont montés en-dessous de mountpoint +puis démonter mountpoint. Démonter aussi tous les systèmes de fichiers +bind-montés à partir d'un sous-répertoire de mountpoint." +} + +args=(--help '$exit_with display_help') +parse_args "$@"; set -- "${args[@]}" + +mountp="$1" +[ -n "$mountp" ] || die "Vous dévez spécifier le système de fichier à démonter" +[ -d "$mountp" ] || die "$mountp: répertoire introuvable" +setx mountp=abspath "$mountp" + +run_as_root "$@" + +setx -a mountps=findmnt -nlo TARGET +array_contains mountps "$mountp" || die "Vous devez spécifier un répertoire de montage valide" + +function show_all() { + findmnt -T "$mountp" -Rnlo TARGET + findmnt -nlo TARGET | awkrun mountp="$mountp" '{ if (substr($0, 1, length(mountp) + 1) == (mountp "/")) print }' +} + +setx -a mounts=evalp show_all // sort -u // \ + awk '{print length($0) "," $0}' // \ + sort -nr // \ + awk '{sub(/[0-9]+,/, ""); print}' +for mount in "${mounts[@]}"; do + estep "$mount" + umount "$mount" || die +done