-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathptt-cleanup.sh
executable file
·121 lines (108 loc) · 3.22 KB
/
ptt-cleanup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
# ptt-cleanup.sh
#
# Created by Yann Rapaport on 30/07/2018.
#
source "$(dirname "$0")/ptt-lib.inc"
# Variables
RM_DIRS=()
DEFAULT_ACTION="all"
USE_PAGER=true
# Fonction usage
usage() {
echo "Usage: $0 [--export | --empty | --all] [--pager | --nopager]"
echo
echo "Options:"
echo " --export Supprime les répertoires export, même s'ils ne sont pas vides."
echo " --empty Supprime uniquement les répertoires vides."
echo " --all Supprime les répertoires export et vides. (par défaut)"
echo " --pager Utilise un pager pour afficher la liste des répertoires avant confirmation. (par défaut)"
echo " --nopager N'utilise pas de pager."
echo
exit 1
}
# Parse les options
ACTION=""
PAGER_OPTION_SET=false
for arg in "$@"; do
case $arg in
--export)
if [ -n "$ACTION" ]; then
echo "Erreur: Les options --export, --empty et --all sont mutuellement exclusives."
usage
fi
ACTION="export"
;;
--empty)
if [ -n "$ACTION" ]; then
echo "Erreur: Les options --export, --empty et --all sont mutuellement exclusives."
usage
fi
ACTION="empty"
;;
--all)
if [ -n "$ACTION" ]; then
echo "Erreur: Les options --export, --empty et --all sont mutuellement exclusives."
usage
fi
ACTION="all"
;;
--pager)
if [ "$PAGER_OPTION_SET" = true ]; then
echo "Erreur: Les options --pager et --nopager sont mutuellement exclusives."
usage
fi
USE_PAGER=true
PAGER_OPTION_SET=true
;;
--nopager)
if [ "$PAGER_OPTION_SET" = true ]; then
echo "Erreur: Les options --pager et --nopager sont mutuellement exclusives."
usage
fi
USE_PAGER=false
PAGER_OPTION_SET=true
;;
--help)
usage
;;
*)
echo "Option inconnue : $arg"
usage
;;
esac
done
# Si aucune action n'a été spécifiée, on utilise l'action par défaut
if [ -z "$ACTION" ]; then
ACTION=$DEFAULT_ACTION
fi
# Collecte les répertoires à supprimer
if [ "$ACTION" = "export" ] || [ "$ACTION" = "all" ]; then
while IFS= read -r -d '' dir; do
RM_DIRS+=("$dir")
done < <(find . -name "export" -print0 2>/dev/null)
fi
if [ "$ACTION" = "empty" ] || [ "$ACTION" = "all" ]; then
while IFS= read -r -d '' dir; do
RM_DIRS+=("$dir")
done < <(find . -empty -print0 2>/dev/null)
fi
if [ ${#RM_DIRS[@]} -eq 0 ]; then
echo "Aucun répertoire correspondant trouvé; sortie."
exit
fi
# Affiche la liste des répertoires à supprimer avec ou sans pager
echo "Les répertoires suivants seront supprimés :"
if [ "$USE_PAGER" = true ]; then
printf '%s\n' "${RM_DIRS[@]}" | less
else
printf '%s\n' "${RM_DIRS[@]}"
fi
# Confirmation de suppression
echo "Continuer (Y/n)?"
read -r ans
case $ans in
n|N) exit;;
""|Y|y) rm -rf "${RM_DIRS[@]}";;
*) echo "Réponse non reconnue : $ans";;
esac