#351 Le 30/04/2025, à 07:41
- Watael

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
mouais, declare -n et pas declare -na.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#352 Le 30/04/2025, à 07:54
- Watael

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
je pense qu'il est temps de réécrire complètement ton script au propre, parce que depuis que tu l'as commencé, et avec tous les petits bouts ajoutés, il ressemble à un patchwork cousu avec du fil d'araignée. Et je déteste ça, le patchwork. ![]()
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#353 Le 30/04/2025, à 07:55
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
bon voilà une version qui devrait te plaire un peu plus :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
choixlabel() {
local rgx="[^[:alnum:]_-.]"
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
echo "Erreur, votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
# traitement des partitions montées :
mapfile -t PartMountPoints < <(grep "$Part" /etc/mtab | cut -d " " -f 2)
if [ -n "${PartMountPoints[0]}" ]; then
for pmp in "${PartMountPoints[@]}"; do
umount -v "$pmp"
if [ -d "$pmp" ]; then
if [[ $pmp =~ $rgx ]]; then
rmdir -v "$pmp"
else
echo "$pmp a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$pmp" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
fi
# traitement des partitions NON montées :
mapfile -t mountPoints < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
if [ -n "${mountPoints[0]}" ]; then
for mp in "${mountPoints[@]}"; do
if [ -d "$mp" ]; then
if [[ $mp =~ $rgx ]]; then
rmdir -v "$mp"
else
echo "$mp a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$mp" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
fi
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}"
ListPart[$i,1]="${lsblkDT[1]}"
if [[ ${lsblkDT[2]} =~ ^/ ]]; then
ListPart[$i,2]="${lsblkDT[2]}"
ListPart[$i,3]="${lsblkDT[3]}"
else
ListPart[$i,2]=""
ListPart[$i,3]="${lsblkDT[2]}"
fi
fi
fi
done < <(lsblk -no path,fstype,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
echo "Il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/4))
echo
echo " n° ⇒ path label fstype mountpoint"
echo "--------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartLabel="${ListPart[$((PartNum-1)),3]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
if [ -z "$PartLabel" ]; then
echo "La partition « $Part » n’a pas d’étiquette."
choixlabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
choixlabel
break
;;
*)
;;
esac
done
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "les lignes contenant cet UUID seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "les lignes contenant ce LABEL seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera demontée , le fichier /etc/fstab nettoyé , et la partition sera à nouveau montée si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
delMountPoints
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
echo "erreur innatendue , annulation des modifications !"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "-----------------------------------------------------------------"
echo "Script pour montage de partition de données terminé avec succès !"
echo
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel »."
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
echo "Erreur inconnue !"
exit 4
fi
break
;;
*)
;;
esac
doneoui ba maintenant qu ' il est fini , autant repartir de zero ![]()
Dernière modification par iznobe (Le 30/04/2025, à 07:58)
Hors ligne
#354 Le 30/04/2025, à 08:17
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
bon et cette fois la version finale :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
chooseLabel() {
local rgx="[^[:alnum:]_-.]"
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
echo "Erreur, votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}"
ListPart[$i,1]="${lsblkDT[1]}"
if [[ ${lsblkDT[2]} =~ ^/ ]]; then
ListPart[$i,2]="${lsblkDT[2]}"
ListPart[$i,3]="${lsblkDT[3]}"
else
ListPart[$i,2]=""
ListPart[$i,3]="${lsblkDT[2]}"
fi
fi
fi
done < <(lsblk -no path,fstype,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
echo "Il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/4))
echo
echo " n° ⇒ path label fstype mountpoint"
echo "--------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartLabel="${ListPart[$((PartNum-1)),3]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
if [ -z "$PartLabel" ]; then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "les lignes contenant cet UUID seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "les lignes contenant ce LABEL seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera demontée , le fichier /etc/fstab nettoyé , et la partition sera à nouveau montée si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
echo "erreur innatendue , annulation des modifications !"
umount -v /media/"$newLabel"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "-----------------------------------------------------------------"
echo "Script pour montage de partition de données terminé avec succès !"
echo
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel »."
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
echo "Erreur inconnue !"
exit 4
fi
break
;;
*)
;;
esac
doneDernière modification par iznobe (Le 30/04/2025, à 08:27)
Hors ligne
#355 Le 30/04/2025, à 08:25
- Watael

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
"fini", ça ne veut pas dire "bien fait".
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#356 Le 30/04/2025, à 08:45
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
certes , mais re organiser les " etapes " , ajouter la sauvegarde du fichier fstab et ajouter la question de confirmation supplémentaire en cas de détection d ' anomalies .
ce n' est peut être pas "bien fait" , mais c' est déjà pas si mal . je trouve qu il couvre bien plus que la majorité des cas , pour ne pas dire tous les cas envisageables grace à l' aide des contributeurs sur ce post que je remercient encore à nouveau pour leur aide d ' ailleurs .
et de mon propre chef , je n' arriverais pas en faire la moitié de toute manière .
veux tu l' accès au github pour modifier et que je crée une version de dev ?
Dernière modification par iznobe (Le 30/04/2025, à 14:39)
Hors ligne
#357 Le 27/08/2025, à 17:25
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour , dans le cas où une étiquette invalide a été entrée avant le script , comme c' est le cas dans cette discussion : https://forum.ubuntu-fr.org/viewtopic.php?id=2092259
Cela parait il correct pour palier de façon sûre au problème qui n' était pas géré auparavant par le script :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
checkLabel () {
local rgx="[^[:alnum:]_-.]"
test -n "$1" && newLabel="$1"
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
echo "Erreur, votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
}
chooseLabel() {
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
checkLabel
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}"
ListPart[$i,1]="${lsblkDT[1]}"
if [[ ${lsblkDT[2]} =~ ^/ ]]; then
ListPart[$i,2]="${lsblkDT[2]}"
ListPart[$i,3]="${lsblkDT[3]}"
else
ListPart[$i,2]=""
ListPart[$i,3]="${lsblkDT[2]}"
fi
fi
fi
done < <(lsblk -no path,fstype,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
echo "Il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/4))
echo
echo " n° ⇒ path label fstype mountpoint"
echo "-----------------------------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartLabel="${ListPart[$((PartNum-1)),3]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
if test -z "$PartLabel" -a ; then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
if ! checkLabel "$PartLabel";then
echo "étiquette incorrecte ! vous devez choisir une étiquette valide"
chooseLabel
fi
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "les lignes contenant cet UUID seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "les lignes contenant ce LABEL seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera demontée , le fichier /etc/fstab nettoyé , et la partition sera à nouveau montée si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
echo "erreur innatendue , annulation des modifications !"
umount -v /media/"$newLabel"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "-----------------------------------------------------------------"
echo "Script pour montage de partition de données terminé avec succès !"
echo
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel »."
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
echo "Erreur inconnue !"
exit 4
fi
break
;;
*)
;;
esac
doneHors ligne
#358 Le 28/08/2025, à 00:32
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Finalement , apres test , j ' ai apporté de nouvelles modifications pour que cela fonctionne :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
checkLabel () {
local rgx="[^[:alnum:]_-.]"
test -n "$1" && newLabel="$1"
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
if test -z "$1"; then
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
echo "Erreur, votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
fi
}
chooseLabel() {
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
checkLabel
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}"
ListPart[$i,1]="${lsblkDT[1]}"
if [[ ${lsblkDT[2]} =~ ^/ ]]; then
ListPart[$i,2]="${lsblkDT[2]}"
ListPart[$i,3]="${lsblkDT[3]}"
else
ListPart[$i,2]=""
ListPart[$i,3]="${lsblkDT[2]}"
fi
fi
fi
done < <(lsblk -no path,fstype,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
echo "Il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/4))
echo
echo " n° ⇒ path label fstype mountpoint"
echo "-----------------------------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartLabel="${ListPart[$((PartNum-1)),3]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
if test -z "$PartLabel";then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
elif checkLabel "$PartLabel"; then
echo "La partition « $Part » a l’étiquette « $PartLabel »."
echo "étiquette incorrecte ! vous devez choisir une étiquette valide."
unset newLabel
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "les lignes contenant cet UUID seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "les lignes contenant ce LABEL seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera demontée , le fichier /etc/fstab nettoyé , et la partition sera à nouveau montée si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
echo "erreur innatendue , annulation des modifications !"
umount -v /media/"$newLabel"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "-----------------------------------------------------------------"
echo "Script pour montage de partition de données terminé avec succès !"
echo
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel »."
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
echo "Erreur inconnue !"
exit 4
fi
break
;;
*)
;;
esac
doneDernière modification par iznobe (Le 28/08/2025, à 00:41)
Hors ligne
#359 Le 28/08/2025, à 11:22
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
bon , et bien ca ne fonctionne toujours pas .
Je sais pas pourquoi , mais je n' arrive pas a " recuperer " une sortie de la fonction ( j ' ai essayer avec " return " et tout un tas de truc ) pour faire en sorte que la condition fonctionne dans le cas ou une étiquette valide / invalide est déjà présente ...
le probleme est peut etre dans la regex ?
exemple de retour :
iznobe@iznobe-pc:~$ sudo bash Scripts/automount_part_data.sh
n° ⇒ path label fstype mountpoint
-----------------------------------------------------------------
1 ⇒ /dev/sda1 Seagate/4T ext4
...
Choisissez le numéro correspondant à votre future partition de données : 1
La partition « /dev/sda1 » a l’étiquette « Seagate/4T ».
Voulez-vous changer l’étiquette de la partition « /dev/sda1 » ? [O/n] n
iznobe@iznobe-pc:~$ un " / " devrait etre considéré comme un caractere non accepté , à priori ce n' est pas le cas .
Dernière modification par iznobe (Le 28/08/2025, à 12:38)
Hors ligne
#360 Le 28/08/2025, à 12:49
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
test avec le code suivant :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
checkLabel () {
local rgx="[^[:alnum:]_-/.]"
#local rgx="abcdefghijklmnopqrstuvwxyz_-.ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
test -n "$1" && newLabel="$1"
echo "$newLabel"
#(( $#>0 )) && newLabel="$1"
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
return 1
else
return 0
fi
}
checkLabel "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
echo "$?"quelques retours :
iznobe@iznobe-pc:~$ sudo bash Scripts/testeur.sh
/
0
iznobe@iznobe-pc:~$ sudo bash Scripts/testeur.sh
a
0
iznobe@iznobe-pc:~$ sudo bash Scripts/testeur.sh
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !
1
iznobe@iznobe-pc:~$ sudo bash Scripts/testeur.sh
!
0
iznobe@iznobe-pc:~$ sudo bash Scripts/testeur.sh
é
0
iznobe@iznobe-pc:~$ sudo bash Scripts/testeur.sh
%
0
iznobe@iznobe-pc:~$ la regex ne convient pas ...
Hors ligne
#361 Le 28/08/2025, à 13:07
- nany

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour,
Du mal à remettre le nez dedans mais,
un " / " devrait etre considéré comme un caractere non accepté , à priori ce n' est pas le cas .
Le point désignant n’importe quel caractère, « / » est logiquement accepté.
Essaie :
local rgx="[^[:alnum:]_-\.]"Hors ligne
#362 Le 28/08/2025, à 13:32
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
j ' ai deja essayé mais non ...
Par contre , je viens de trouver qu ' avec :
local rgx="[^[:alnum:]_.-]"là ca fonctionne ... le point en dernier emplacement avant un crochet a une signification particulière ? et si il n' est pas juste avant le crochet une autre ?
voici ce que j' ai pondu :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
err() {
>&2 echo -e "\\033[1;31m Erreur : $* \\033[0;0m"
}
checkLabel() {
test -n $1 || exit
#local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-]"
local rgx="[^[:alnum:]_.-]"
if [[ $1 =~ $rgx || ${#1} -gt 16 ]]; then
unset PartLabel
return 1
fi
}
chooseLabel() {
local rgx="[^[:alnum:]_.-]"
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
err "le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
err "votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
err "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo $0 »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}"
ListPart[$i,1]="${lsblkDT[1]}"
if [[ ${lsblkDT[2]} =~ ^/ ]]; then
ListPart[$i,2]="${lsblkDT[2]}"
ListPart[$i,3]="${lsblkDT[3]}"
else
ListPart[$i,2]=""
ListPart[$i,3]="${lsblkDT[2]}"
fi
fi
fi
done < <(lsblk -no path,fstype,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
err "il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/4))
echo
echo " n° ⇒ path label fstype mountpoint"
echo "-----------------------------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
err "votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartLabel="${ListPart[$((PartNum-1)),3]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
if test -z "$PartLabel";then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
checkLabel "$PartLabel"
if (( $? == 1 )); then
err "étiquette invalide !"
unset newLabel
chooseLabel
else
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "le fichier /etc/fstab sera mis à jour si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "le fichier /etc/fstab sera mis à jour si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera démontée , le fichier /etc/fstab sera mis à jour si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
err "inattendue , annulation des modifications !"
umount -v /media/"$newLabel"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "Création de la corbeille réussie"
echo "-----------------------------------------------------------------"
echo -e "\\033[1;34m Script pour montage de partition de données terminé avec succès ! \\033[0;0m"
echo
echo -e "\\033[1;34m Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel » . \\033[0;0m"
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
err "inconnue !"
exit 4
fi
break
;;
*)
;;
esac
donece n' est peut être pas idéal , mais au moins ( je pense ) que ça fonctionne .
j ' ai actualisé github .
Dernière modification par iznobe (Le 29/08/2025, à 00:37)
Hors ligne
#363 Le 29/08/2025, à 19:11
- RaphaelG
Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Une petite mise au point sur les regexes :
A l'intérieure d'une "bracket expression" (un truc du genre [.....], mes tentatives de traduire cette expression en français ne m'ont pas satisfait. Dans la littérature on voit aussi "character class" mais dans "man 7 regex" on n'utilise que "bracket expression") les caractères perdent leur propriété spéciale. Ainsi le '.' qui est normalement un joker (wildcard) pouvant toucher n'importe quel caractère, perd cette propriété pour prendre sa valeur littérale. C'est d'ailleurs ce que tu souhaites dans le cas qui nous intéresse.
Mais le '-' est un métacaractère pour les bracket expressions. Il est utilisé pour créer un intervalle. Ainsi, le motif "[0-9]" touche tous les chiffres du système décimal.
Si on veut utiliser le caractère '-' pour sa valeur littérale alors il faut le mettre soit juste derrière le caractère '[' ou juste derrrière la séquence "[^" ou juste devant le caractère ']'.
Les motifs correspondants à ta recherche sont multiples. Outre "[^[:alnum:]_.-]" que tu as trouvé, il y a aussi "[^-[:alnum:]_.]" et plein d'autres combinaisons car l'ordre entre "[:alpnum;]", '_' et '.' n'a pas d'importance.
Hors ligne
#364 Le 29/08/2025, à 19:34
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Salut RaphaelG , merci pour cette explication , maintenant , je comprends mieux pourquoi ça fonctionne l ' expression que j' ai trouvée , un peu au pif , faut l' avouer ...
le truc c ' était pas le point mais le tiret qui faisait que ca merdoyait ...
Bon , j ' ai toujours un peu galérer avec les regex ( même si c' est pas le seul point avec lequel je galère
)
il faudrait que je pratique bien plus souvent pour que je n ' oublie pas , tout le problème est là ...
Hors ligne
#365 Le 17/09/2025, à 07:49
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour , on pourrait facilement faire en sorte que ce script soit aussi utile pour les partitions externes .
il suffit de ne rien ajouter au fstab , ou bien de mettre les options qui font en sortent que ca ne bloque pas et ne ralenti pas le demarrage .
je sais , mais je ne retrouve plus , qu ' une commande permet de voir si le disque est detecté comme externe ou interne , une idée de comment obtenir l ' info ?
Hors ligne
#366 Le 17/09/2025, à 07:55
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour , on pourrait facilement faire en sorte que ce script soit aussi utile pour les partitions externes .
il suffit de ne rien ajouter au fstab , ou bien de mettre les options qui font en sortent que ca ne bloque pas et ne ralenti pas le demarrage .
je sais , mais je ne retrouve plus , qu ' une commande permet de voir si le disque est detecté comme externe ou interne , une idée de comment obtenir l ' info ?
il semblerait qu ' avec lsblk , ce soit la donnée HOTPLUG a 1 ?
Hors ligne
#367 Le 17/09/2025, à 08:39
- O_20_100_O

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
il semblerait qu ' avec lsblk , ce soit la donnée HOTPLUG a 1 ?
Effectivement, le man contient :
HOTPLUG <boolean> périphérique amovible ou connectable à chaud (USB, PCMCIA, etc.)Et ça se vérifie chez moi, les disques internes sont à 0 et une clé USB à 1.
Hors ligne
#368 Le 17/09/2025, à 08:53
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bon , voilà la prise en charge de partitions de disque durs externe , a tester une peu plus en profondeur :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
err() {
>&2 echo -e "\\033[1;31m Erreur : $* \\033[0;0m"
}
checkLabel() {
test -n $1 || exit
#local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-]"
local rgx="[^[:alnum:]_.-]"
if [[ $1 =~ $rgx || ${#1} -gt 16 ]]; then
unset PartLabel
return 1
fi
}
chooseLabel() {
local rgx="[^[:alnum:]_.-]"
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
err "le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
err "votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
err "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo $0 »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype hotplug mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}" # path
ListPart[$i,1]="${lsblkDT[1]}" # fstype
ListPart[$i,2]="${lsblkDT[2]}" # hotplug
if [[ ${lsblkDT[3]} =~ ^/ ]]; then # si mount point non vide
ListPart[$i,3]="${lsblkDT[3]}" # mountpoint
ListPart[$i,4]="${lsblkDT[4]}" # label
else # si mount point est vide on decale la sortie avec une colonne en moins
ListPart[$i,3]=" " # mountpoint vide
ListPart[$i,4]="${lsblkDT[3]}" # label passe en indice 3 à la place du mountpoint
fi
fi
fi
done < <(lsblk -no path,fstype,hotplug,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
err "il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/5))
echo # 0 1 2 3 4
echo " n° ⇒ path fstype externe/interne mountpoint label"
echo "-----------------------------------------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]} ${ListPart[$n,3]} ${ListPart[$n,4]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]} ${ListPart[$n,3]} ${ListPart[$n,4]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
err "votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
PartPlug="${ListPart[$((PartNum-1)),2]}"
PartLabel="${ListPart[$((PartNum-1)),4]}"
if test -z "$PartLabel";then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
checkLabel "$PartLabel"
if (( $? == 1 )); then
err "étiquette invalide !"
unset newLabel
chooseLabel
else
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "le fichier /etc/fstab sera mis à jour si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "le fichier /etc/fstab sera mis à jour si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera démontée , le fichier /etc/fstab sera mis à jour si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ^ext[2-4] ]]; then
e2label "$Part" "$newLabel"
if ((PartPlug==0)); then echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab; fi
elif [ $PartFstype == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
if ((PartPlug==0)); then # partition interne
if dpkg-query -l ntfs-3g | grep -q "^[hi]i"; then
echo "LABEL=$newLabel /media/$newLabel ntfs-3g defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
else
echo "LABEL=$newLabel /media/$newLabel ntfs defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
fi
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
err "inattendue , annulation des modifications !"
mv -v /etc/fstab.BaK /etc/fstab # il faut enlever la ligne qui a étée ajouter au fstab
umount -v /media/"$newLabel"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "Création de la corbeille réussie"
echo "-----------------------------------------------------------------"
echo -e "\\033[1;34m Script pour montage de partition de données terminé avec succès ! \\033[0;0m"
echo
echo -e "\\033[1;34m Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel » . \\033[0;0m"
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
err "inconnue !"
exit 4
fi
break
;;
*)
;;
esac
doneDernière modification par iznobe (Le 18/09/2025, à 11:56)
Hors ligne
#369 Le 18/09/2025, à 11:56
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour ,
curieusement , je viens de remarquer que la partition racine n ' est pas exclue de la liste ...
Hors ligne
#370 Le 27/09/2025, à 09:49
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour , il reste un dernier petit soucis à regler , la propo 14 :
iznobe@iznobe-pc:~$ sudo bash Scripts/automount_part_data.sh
[sudo] Mot de passe de iznobe :
n° ⇒ path fstype externe/interne mountpoint label
-----------------------------------------------------------------------------
1 ⇒ /dev/sda1 ext4 0 Seagate_4T
2 ⇒ /dev/sda4 ext3 0 ubuntu_24.04
3 ⇒ /dev/sdb1 ext4 0 /media/Videos/WD8 WD8
4 ⇒ /dev/sdb2 ext4 0 SAUV
5 ⇒ /dev/sdc3 ext4 0 /datas Data
6 ⇒ /dev/sdd1 ext4 0 /media/WD8PRO1_P1 WD8PRO1_P1
7 ⇒ /dev/sdd2 ext4 0 /media/Videos/WD8PRO1_P2 WD8PRO1_P2
8 ⇒ /dev/sde1 ext4 0 /media/Videos/WD8PRO2 WD8PRO2
9 ⇒ /dev/nvme0n1p1 ntfs 0 windows_10
10 ⇒ /dev/nvme0n1p3 ext4 0 Arch
11 ⇒ /dev/nvme0n1p5 ext4 0 LM_21_SSD
12 ⇒ /dev/nvme0n1p6 ext4 0 U_20.04_SSD
13 ⇒ /dev/nvme0n1p7 ext4 0 U_22.budgie_SSD
14 ⇒ /dev/nvme0n1p8 ext4 0 / U_24.04_SSD
15 ⇒ /dev/nvme0n1p9 ext4 0 LM_SSD_NEW
16 ⇒ /dev/nvme0n1p10 ext4 0 DEBIAN_XFCE
Choisissez le numéro correspondant à votre future partition de données : EDIT : résolu : bon , c' est lié a mes derniers changements , j' avais oublié d ' assortir le controle de la regex sur le bon champ ...
while read -ra lsblkDT; do #path fstype hotplug mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[3]} =~ ${Rgx[mountP]} ]]; thenDernière modification par iznobe (Le 27/09/2025, à 10:15)
Hors ligne
#371 Le 12/10/2025, à 17:49
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour , voici ce sur quoi je suis arrivé pour finaliser dans un script ce qui est indiqué sur cette page : partitions_data
Si quelqu ' un veut tester le script au complet , presque finalisé ( j ' aimerais ajouté la restauration du fichier .config/user-dirs.dirs en cas d' echec de transfert , mais je ferai ça plus tard , perdu trop de temps avec l' histoire du AWK ... ) , le voici :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
err() {
>&2 echo -e "\\033[1;31m Erreur : $* \\033[0;0m"
}
checkLabel() {
test -n $1 || exit
#local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-]"
local rgx="[^[:alnum:]_.-]"
if [[ $1 =~ $rgx || ${#1} -gt 16 ]]; then
unset PartLabel
return 1
fi
}
chooseLabel() {
local rgx="[^[:alnum:]_.-]"
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
err "le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
err "votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
err "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo $0 »)."
exit 1
fi
home="/home/$SUDO_USER"
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype hotplug mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[3]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}" # path
ListPart[$i,1]="${lsblkDT[1]}" # fstype
ListPart[$i,2]="${lsblkDT[2]}" # hotplug
if [[ ${lsblkDT[3]} =~ ^/ ]]; then # si mount point non vide
ListPart[$i,3]="${lsblkDT[3]}" # mountpoint
ListPart[$i,4]="${lsblkDT[4]}" # label
else # si mount point est vide on decale la sortie avec une colonne en moins
ListPart[$i,3]=" " # mountpoint vide
ListPart[$i,4]="${lsblkDT[3]}" # label passe en indice 3 à la place du mountpoint
fi
fi
fi
done < <(lsblk -no path,fstype,hotplug,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
err "il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/5))
echo # 0 1 2 3 4
echo " n° ⇒ path fstype externe/interne mountpoint label"
echo "-----------------------------------------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]} ${ListPart[$n,3]} ${ListPart[$n,4]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]} ${ListPart[$n,3]} ${ListPart[$n,4]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
err "votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
PartPlug="${ListPart[$((PartNum-1)),2]}"
PartLabel="${ListPart[$((PartNum-1)),4]}"
if test -z "$PartLabel";then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
checkLabel "$PartLabel"
if (( $? == 1 )); then
err "étiquette invalide !"
unset newLabel
chooseLabel
else
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
q=1
fi
if grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
q=1
fi
if grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
q=1
fi
while ((q=1)); do
echo "le fichier /etc/fstab sera mis à jour si vous poursuivez"
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ^ext[2-4] ]]; then
e2label "$Part" "$newLabel"
if ((PartPlug==0)); then # partition interne
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults" >> /etc/fstab
else # partition externe EXT2/3/4
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
fi
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
if ((PartPlug==0)); then # partition interne
if dpkg-query -l ntfs-3g | grep -q "^[hi]i"; then
echo "LABEL=$newLabel /media/$newLabel ntfs-3g defaults,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
else
echo "LABEL=$newLabel /media/$newLabel ntfs defaults,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
else # partition externe NTFS
if dpkg-query -l ntfs-3g | grep -q "^[hi]i"; then
echo "LABEL=$newLabel /media/$newLabel ntfs-3g defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
else
echo "LABEL=$newLabel /media/$newLabel ntfs defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
fi
fi
part_data_path="/media/$newLabel"
if ! [ -d "$part_data_path" ]; then
mkdir -v "$part_data_path"
fi
systemctl daemon-reload
if ! mount -a; then
err "inattendue , annulation des modifications !"
mv -v /etc/fstab.BaK /etc/fstab # il faut enlever la ligne qui a étée ajouter au fstab
umount -v "$part_data_path"
rmdir -v "$part_data_path"
systemctl daemon-reload
exit 3
fi
part_data_user_dir="/media/$newLabel/$SUDO_USER-$newLabel"
if ! [ -d "$part_data_user_dir" ]; then
mkdir -v "$part_data_user_dir"
fi
chown -c "$SUDO_USER": "$part_data_user_dir"
trash_user_dir="$part_data_path"/.Trash-"$SUDO_UID"
if ! [ -d "$trash_user_dir" ]; then
mkdir -v "$trash_user_dir"
fi
chown -c "$SUDO_USER": "$trash_user_dir"
chmod -c 700 "$trash_user_dir"
if [ -d "$trash_user_dir" ]; then
echo
echo "Création de la corbeille réussie"
echo -e "\\033[1;34m Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « $part_data_user_dir » . \\033[0;0m"
echo
echo "-----------------------------------------------------------------"
echo
else
err "inconnue !"
exit 4
fi
break
;;
*)
;;
esac
done
while true; do
read -rp "Voulez-vous deplacer TOUTES vos données utilisateur dans la partition « $Part » qui vient d' être montée sur : « $part_data_user_dir » ?
cette action peut durer très longtemps, ne pas interrompre pour éviter la perte des données . soyez patient svp !
Lancer le déplacement de TOUTES les données maintenant ? [O/n]"
case "$REPLY" in
N|n)
err "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
xdg_conf_file="$home/.config/user-dirs.dirs"
if test -f "$xdg_conf_file"; then
# sauvegarde du fichier
cp -v "$xdg_conf_file" "$xdg_conf_file".BaK
declare -A ListDir
while read -ra xdg_dirs; do
if [[ ${xdg_dirs[1]} != '$HOME' ]]; then
continue
elif test -z ${xdg_dirs[2]}; then
continue
elif test -d "$home/${xdg_dirs[2]}" -a "$home/${xdg_dirs[2]}" != "$home"; then
((++i))
ListDir[$i,0]="${xdg_dirs[0]}" # = XDG_DESTOP_DIR=
ListDir[$i,1]="${xdg_dirs[1]}" # = $HOME
ListDir[$i,2]="${xdg_dirs[2]}" # = dossier de stockage personnel
fi
done < <(awk -F'["/]' '/^XDG/{print $1,$2,$3}' "$xdg_conf_file")
if ((${#ListDir[@]} == 0)); then
err "Aucune variable XDG valide a traiter !"
exit 6
else
nbDev=$(("${#ListDir[@]}"/3))
for (( n=0; n<nbDev; n++ )); do # ${ListDir[$n,0] = XDG_DESTOP_DIR= , ${ListDir[$n,1] = $HOME , ${ListDir[$n,2]} = dossier de stockage personnel
name=${ListDir[$n,0]:4 :-5}
xdg-user-dirs-update --set "$name" "$part_data_user_dir/${ListDir[$n,2]}"
done
fi
else
err "pas de fichier .config/user-dirs.dirs !"
exit 5
fi
for elem in $home/*; do
if test -d "$elem"; then
mv -v "$elem" "$part_data_user_dir/" && ln -s "$part_data_user_dir/$elem" "$home"
else mv -v "$elem" "$part_data_user_dir"
fi
done
# mv -v "$xdg_conf_file".BaK "$xdg_conf_file"
break
;;
*)
;;
esac
done
echo -e "\\033[1;34m Script pour montage de partition de données terminé avec succès ! \\033[0;0m"
#sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1Un conseil , faites une sauvegarde du fstab , parfois , sans que je comprenne bien pourquoi ,au cours de mes essais ( un peur farfelus il est vrai ) il m ' estt arrivé que ce fichier disparraisse . en plus de celle prévue dans le script .
PS :
La safe mécanique, elle risque de remplir toute la partition HOME qui est probablement intégrée au logiciel avec tout le risque qui en découle pour le redémarrage. Je n'aime pas l'idée de faire croire que tout va bien alors que tout est vau-l'eau. Tant pis si je suis le seul à penser cela.
j ' ai modifié le script d' origine pour prendre en compte ta remarque au niveau du fstab ![]()
ET merci à tous ceux qui ont participé et aider à construire ce script .
C ' est vraiment formidable de trouver autant d' aide sur ce forum !
Dernière modification par iznobe (Le 12/10/2025, à 17:56)
Hors ligne
#372 Le 12/10/2025, à 18:28
- geole
Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
Bonjour
Je pars du principe que c'est toujours cette consigne qui est valable.
sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/iznobe/automount_part_data/refs/heads/main/automount_part_data.sh)"
J'ai eu (très) peur.....
n° ⇒ path fstype externe/interne mountpoint label
-----------------------------------------------------------------------------
1 ⇒ /dev/sda1 ntfs 0 ssdWinboot
2 ⇒ /dev/sda2 ntfs 0 ssdWinXP
3 ⇒ /dev/sda3 ntfs 0 ssdWin10
4 ⇒ /dev/sdb1 ntfs 0 WinXP-2To
5 ⇒ /dev/sdb2 ntfs 0 /media/NosDonnees NosDonnees
6 ⇒ /dev/sdb3 ntfs 0 Win7-2To
7 ⇒ /dev/sdc2 ntfs 0 4ToWinXP-2To
8 ⇒ /dev/sdc3 ntfs 0 4ToWin7-2To
9 ⇒ /dev/sdc4 ntfs 0 4tossdWinboot
10 ⇒ /dev/sdc5 ext4 0 4ToHOME
11 ⇒ /dev/sdc6 ntfs 0 4ToNosDonnees
12 ⇒ /dev/sdc7 ntfs 0 /media/4ToBigDisk 4ToBigDisk
13 ⇒ /dev/sdc8 ntfs 0 /media/4ToReserve 4ToReserve
14 ⇒ /dev/sdc9 ntfs 0 4TossdWin10
15 ⇒ /dev/sdc11 ext4 0 4ToFamille
16 ⇒ /dev/sdc12 ntfs 0 4tossdWin10-OLD
17 ⇒ /dev/sdc13 ext4 0 4TossdUbuntu2404
18 ⇒ /dev/sdd3 ntfs 0
19 ⇒ /dev/sdd4 ext4 0
20 ⇒ /dev/md0 ext4 0
21 ⇒ /dev/md0 ext4 0
Choisissez le numéro correspondant à votre future partition de données : 19
La partition « /dev/sdd4 » n’a pas d’étiquette.
Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : iznobe
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd4 » en y mettant pour étiquette « iznobe » ? [O/n]
Etes-vous SÛR de vouloir procéder au montage pour la partition « /dev/sdd4 » en y mettant pour étiquette « iznobe » ? [O/n]
sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications
rmdir: suppression du répertoire, '/media/NosDonnees'
rmdir: impossible de supprimer '/media/NosDonnees': Périphérique ou ressource occupé
rmdir: suppression du répertoire, '/media/4ToBigDisk'
rmdir: impossible de supprimer '/media/4ToBigDisk': Périphérique ou ressource occupé
rmdir: suppression du répertoire, '/media/4ToReserve'
rmdir: impossible de supprimer '/media/4ToReserve': Périphérique ou ressource occupé
rmdir: suppression du répertoire, '/media/NTFS'
mkdir: création du répertoire '/media/iznobe'
mkdir: création du répertoire '/media/iznobe/a-iznobe'
appartenance de '/media/iznobe/a-iznobe' modifiée de root:root en a:a
mkdir: création du répertoire '/media/iznobe/.Trash-1000'
appartenance de '/media/iznobe/.Trash-1000' modifiée de root:root en a:a
le mode de '/media/iznobe/.Trash-1000' a été modifié de 0755 (rwxr-xr-x) en 0700 (rwx------)
Création de la corbeille réussie
-----------------------------------------------------------------
Script pour montage de partition de données terminé avec succès !
Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/iznobe/a-iznobe » .Dernière modification par geole (Le 12/10/2025, à 18:32)
Les écrans de l'installateur 26.04 https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#373 Le 12/10/2025, à 18:40
- geole
Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
J'ai fais un copier/coller du contenu de l'échange 371
C'est en train de tourner
Dans mon $HOME, il y avait un lien symbolique, c'est en train aussi de de placer son contenu.
Je ne mets que la fin
répertoire '/home/a/ventoy-1.1.07/WebUI/static/js' supprimé
répertoire '/home/a/ventoy-1.1.07/WebUI/static' supprimé
'/home/a/ventoy-1.1.07/WebUI/index.html' supprimé
'/home/a/ventoy-1.1.07/WebUI/favicon.ico' supprimé
répertoire '/home/a/ventoy-1.1.07/WebUI' supprimé
'/home/a/ventoy-1.1.07/CreatePersistentImg.sh' supprimé
'/home/a/ventoy-1.1.07/VentoyVlnk.sh' supprimé
répertoire '/home/a/ventoy-1.1.07' supprimé
copié '/home/a/ventoy.txt' -> '/media/iznobe/a-iznobe/ventoy.txt'
'/home/a/ventoy.txt' supprimé
Script pour montage de partition de données terminé avec succès !
root@b:~# a@b:~$ grep -v "#" .config/*.dirs
XDG_DESKTOP_DIR="/media/NosDonnees/Bureau"
XDG_DOWNLOAD_DIR="/media/NosDonnees/Téléchargements"
XDG_TEMPLATES_DIR="$HOME/Modèles"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Musique"
XDG_PICTURES_DIR="$HOME/Images"
XDG_VIDEOS_DIR="$HOME/Vidéos"
XDG_DIVERS_DIR="$HOME/Divers"
a@b:~$ ls -l
total 0
lrwxrwxrwx 1 root root 35 oct. 12 18:34 4755 -> /media/iznobe/a-iznobe//home/a/4755
lrwxrwxrwx 1 root root 40 oct. 12 18:35 ancestris -> /media/iznobe/a-iznobe//home/a/ancestris
lrwxrwxrwx 1 root root 34 oct. 12 18:35 bin -> /media/iznobe/a-iznobe//home/a/bin
lrwxrwxrwx 1 root root 36 oct. 12 18:35 build -> /media/iznobe/a-iznobe//home/a/build
lrwxrwxrwx 1 root root 37 oct. 12 18:34 Bureau -> /media/iznobe/a-iznobe//home/a/Bureau
lrwxrwxrwx 1 root root 39 oct. 12 18:34 DDrescue -> /media/iznobe/a-iznobe//home/a/DDrescue
lrwxrwxrwx 1 root root 37 oct. 12 18:34 Divers -> /media/iznobe/a-iznobe//home/a/Divers
lrwxrwxrwx 1 root root 40 oct. 12 18:34 Documents -> /media/iznobe/a-iznobe//home/a/Documents
lrwxrwxrwx 1 root root 37 oct. 12 18:35 Images -> /media/iznobe/a-iznobe//home/a/Images
lrwxrwxrwx 1 root root 58 oct. 12 18:34 ' Mes donnees synchronisées' -> '/media/iznobe/a-iznobe//home/a/ Mes donnees synchronisées'
lrwxrwxrwx 1 root root 39 oct. 12 18:35 Modèles -> /media/iznobe/a-iznobe//home/a/Modèles
lrwxrwxrwx 1 root root 38 oct. 12 18:35 Musique -> /media/iznobe/a-iznobe//home/a/Musique
lrwxrwxrwx 1 root root 57 oct. 12 18:35 net.zombietrackergps.ztgps -> /media/iznobe/a-iznobe//home/a/net.zombietrackergps.ztgps
lrwxrwxrwx 1 root root 45 oct. 12 18:35 pastebincl-1.0 -> /media/iznobe/a-iznobe//home/a/pastebincl-1.0
lrwxrwxrwx 1 root root 37 oct. 12 18:35 Photos -> /media/iznobe/a-iznobe//home/a/Photos
lrwxrwxrwx 1 root root 37 oct. 12 18:35 Public -> /media/iznobe/a-iznobe//home/a/Public
lrwxrwxrwx 1 root root 36 oct. 12 18:35 RECUP -> /media/iznobe/a-iznobe//home/a/RECUP
lrwxrwxrwx 1 root root 34 oct. 12 18:35 SDC -> /media/iznobe/a-iznobe//home/a/SDC
lrwxrwxrwx 1 root root 35 oct. 12 18:37 snap -> /media/iznobe/a-iznobe//home/a/snap
lrwxrwxrwx 1 root root 48 oct. 12 18:35 Téléchargements -> /media/iznobe/a-iznobe//home/a/Téléchargements
lrwxrwxrwx 1 root root 46 oct. 12 18:37 thunderbird.tmp -> /media/iznobe/a-iznobe//home/a/thunderbird.tmp
lrwxrwxrwx 1 root root 44 oct. 12 18:37 ventoy-1.1.07 -> /media/iznobe/a-iznobe//home/a/ventoy-1.1.07
lrwxrwxrwx 1 root root 38 oct. 12 18:35 Vidéos -> /media/iznobe/a-iznobe//home/a/Vidéos
lrwxrwxrwx 1 root root 36 oct. 12 18:35 Wiper -> /media/iznobe/a-iznobe//home/a/WiperTous les liens symboliques sont foirés et donc en rouge.
ls -l /media/iznobe/a-iznobe
total 18628
drwsr-x--x 2 a a 4096 nov. 6 2024 4755
drwxr-x--x 7 a a 4096 mars 17 2025 ancestris
-rwxr-x--x 1 a a 269366 déc. 18 2024 a.txt
-rwxr-x--x 1 a a 20610 sept. 19 2024 BadDisk.txt
-rwxr-x--x 1 a a 1062579 déc. 19 2024 Big.txt
drwxr-x--x 2 a a 4096 avril 28 19:25 bin
-rwxr-x--x 1 a a 615 nov. 5 2024 Blame.txt
-rwxr-x--x 1 a a 62403 nov. 6 2024 bootinfo.txt
-rwxr-x--x 1 a a 182 oct. 6 2024 boot-repair.txt
-rwxr-x--x 1 a a 4991 août 15 10:00 brprinter_install.log
-rwxr-x--x 1 a a 21086 août 15 09:53 brprinter_install.sh
-rwxr-x--x 1 a a 156622 oct. 21 2024 Bug.txt
drwxr-x--x 2 a a 4096 juil. 19 12:52 build
lrwxrwxrwx 1 a a 24 sept. 18 2024 Bureau -> /media/NosDonnees/Bureau
-rwxr-x--x 1 a a 103 oct. 7 16:19 DATE
drwxr-x--x 7 a a 4096 nov. 17 2024 DDrescue
-rwxr-x--x 1 a a 0 nov. 4 2024 Démarrage1.txt
-rwxr-x--x 1 a a 240685 nov. 13 2024 Démarrage2.txt
-rwxr-x--x 1 a a 183462 nov. 4 2024 Démarrage3.txt
-rwxr-x--x 1 a a 14707 nov. 4 2024 DémarrageX.txt
drwxr-x--x 2 a a 4096 mars 5 2025 Divers
drwxr-x--x 3 a a 4096 oct. 12 11:24 Documents
-rwxr-x--x 1 a a 1812 oct. 7 16:26 DupliNosDonnees.sh
-rw-rw-r-- 1 a a 4834 oct. 2 16:59 DupliUbuntu.sh
-rwxrwxr-x 1 a a 466 sept. 17 15:16 DupliWindows10.sh
-rwxr-x--x 1 a a 4107 avril 27 18:28 err
-rw-r--r-- 1 root root 0 oct. 7 16:26 ERR
-rw-rw-r-- 1 a a 38 sept. 2 14:49 essai
-rwxr-x--x 1 a a 6 avril 3 2025 Essai
-rw-rw-r-- 1 a a 278 oct. 6 18:59 F-err.txt
-rwxr-x--x 1 a a 5 oct. 20 2024 fic
-rwxr-x--x 1 a a 12 août 19 15:34 FICFVIR
-rwxr-x--x 1 a a 0 mars 25 2025 flatpak-builder.txt
-rw-rw-r-- 1 a a 0 oct. 6 20:10 F.txt
-rwxr-x--x 1 a a 6932 mars 18 2025 gparted_details.htm
drwxr-x--x 3 a a 4096 mai 12 11:59 Images
-rwxr-x--x 1 a a 1639 mai 26 13:21 ipv6.txt
-rwxr-x--x 1 a a 1273588 mars 31 2025 journal
-rwxr-x--x 1 a a 312941 nov. 4 2024 journal.txt
-rwxr-x--x 1 a a 2798 janv. 6 2025 lightdm1.txt
-rwxr-x--x 1 a a 32133 janv. 6 2025 lightdm.txt
-rwxr-x--x 1 a a 95 mai 11 19:20 LIRE-sdc
-rwxr-x--x 1 a a 0 mai 11 19:20 LIRE-sdc.1.txt
-rwxr-x--x 1 a a 0 mai 11 19:20 LIRE-sdc.2.txt
-rwxr-x--x 1 a a 3647 avril 12 2025 lsblk
drwxr-x--x 3 a a 4096 mai 27 16:11 ' Mes donnees synchronisées'
drwxr-x--x 2 a a 4096 nov. 3 2024 Modèles
-rwxr-x--x 1 a a 104772 avril 13 19:06 mount
drwxr-x--x 2 a a 4096 nov. 3 2024 Musique
drwxr-x--x 7 a a 4096 mars 26 2025 net.zombietrackergps.ztgps
-rwxr-x--x 1 a a 32 déc. 11 2024 open
drwxr-x--x 3 a a 4096 janv. 8 2012 pastebincl-1.0
-rwxr-x--x 1 a a 5908 avril 25 15:27 Persistance.REF.txt
-rwxr-x--x 1 a a 9142 mai 10 12:39 Persistance.sh
-rwxr-x--x 1 a a 11849 juin 7 19:30 Persistance.txt
drwxr-x--x 2 a a 4096 juin 14 18:23 Photos
-rwxr-x--x 1 a a 24201 juil. 19 19:26 psmem.sh
drwxr-x--x 2 a a 4096 nov. 3 2024 Public
-rwxr-x--x 1 a a 181316 juin 5 16:20 Rapport.html
-rwxr-x--x 1 a a 14570 juin 5 15:40 rapport_v1.2.sh
drwxr-x--x 2 a a 4096 mars 26 2025 RECUP
-rwxr-x--x 1 a a 5454 nov. 5 2024 reparer.sh
-rwxr-x--x 1 a a 2605 mars 30 2025 RwRw.OLD.txt
-rwxr-x--x 1 a a 3208 avril 3 2025 RwRw.txt
-rwxr-x--x 1 a a 345 nov. 13 2024 sda.rescue
-rwxr-x--x 1 a a 411 nov. 13 2024 sda.rescue.bak
-rwxr-x--x 1 a a 0 avril 12 2025 sdb.badblocs
-rwxr-x--x 1 a a 347 avril 12 2025 sdb.rescue
-rwxr-x--x 1 a a 414 nov. 13 2024 sdb.rescue.bak
drwxr-x--x 2 a a 4096 nov. 13 2024 SDC
-rwxr-x--x 1 a a 347 nov. 14 2024 sdc.rescue
-rwxr-x--x 1 a a 414 nov. 14 2024 sdc.rescue.bak
-rwxr-x--x 1 a a 4 sept. 20 2024 sdd.reprise
-rwxr-x--x 1 a a 344 nov. 13 2024 sdd.rescue
-rwxr-x--x 1 a a 409 nov. 13 2024 sdd.rescue.bak
-rwxr-x--x 1 a a 587 sept. 20 2024 sdd.vitesse
-rwxr-x--x 1 a a 344 nov. 14 2024 sde.rescue
-rwxr-x--x 1 a a 410 nov. 14 2024 sde.rescue.bak
-rwxr-x--x 1 a a 193 janv. 17 2025 sedzUv5yi
drwx------ 13 a a 4096 juin 5 18:22 snap
-rwxr-x--x 1 a a 445 déc. 29 2024 snap.txt
-rwxr-x--x 1 a a 10180 déc. 12 2024 SSH.txt
-rwxr-x--x 1 a a 9036 déc. 4 2024 SSH.txt.save
-rwxr-x--x 1 a a 713 mars 31 2025 sudo
-rwxr-x--x 1 a a 70 juil. 31 16:05 'sudo su.txt'
-rwxr-x--x 1 a a 390 janv. 27 2025 Suivi
-rwxrwxr-x 1 a a 12037 oct. 12 18:33 T
-rwxr-x--x 1 a a 713 mars 31 2025 tee
lrwxrwxrwx 1 a a 35 août 18 18:12 Téléchargements -> /media/NosDonnees/Téléchargements
-rwxr-x--x 1 a a 42 mars 29 2025 temps
-rwxr-x--x 1 a a 15437 juil. 27 18:56 test
-rwxr-x--x 1 a a 12978 avril 13 19:03 TestDébit.txt
-rwxr-x--x 1 a a 6133 sept. 20 13:44 testdisk.log
-rwxr-x--x 1 a a 3614 nov. 4 2024 test.txt
-rwxr-x--x 1 a a 20022 mars 19 2025 TestZFS.txt
-rwxr-x--x 1 a a 23957 juin 5 17:07 T.html
drwxr-x--x 2 a a 4096 nov. 5 2024 thunderbird.tmp
-rwxr-x--x 1 a a 47657 janv. 25 2025 top.txt
-rwxr-x--x 1 a a 8138 janv. 25 2025 trace.txt
-rwxr-x--x 1 a a 417 mai 12 11:13 Tri1.txt
-rwxr-x--x 1 a a 1236 mai 12 16:57 Tri.sh
-rwxr-x--x 1 a a 416 mai 12 11:15 Tri.txt
-rwxr-x--x 1 a a 14538582 juil. 18 09:23 ubuntu.zsync
-rwxr-x--x 1 a a 844 mars 12 2025 udev.txt
drwxr-xr-x 7 a a 4096 août 28 17:20 ventoy-1.1.07
-rwxrw-rw- 1 a a 10528 juil. 19 19:26 ventoy.txt
drwxr-x--x 2 a enfants 4096 août 20 09:30 Vidéos
drwxr-x--x 2 a a 4096 avril 23 16:11 Wiper
-rwxr-x--x 1 a a 561 janv. 6 2025 ZFS.txtJe ne vais pas pouvoir pointer en détail. Il est maintenant l'heure d'allumer le barbecue.
Dernière modification par geole (Le 12/10/2025, à 18:50)
Les écrans de l'installateur 26.04 https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#374 Le 12/10/2025, à 18:45
- iznobe

Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
@geole , merci de vouloir tester , mais non , le nouveau script a testé n' est pas dans le github .
il faut le prendre manuellement , c' est celui du #371 pour le moment .
Je suis étonné du retour que tu as eu avec le script du github ...
Pour le nouveau script , oui ca fait toujours un peu peur quand on voit qu ' il supprime plein de trucs ![]()
c' est l' option " -v " de mv .
quand il a copié sur la nouvelle partition , il supprime les fichiers d ' origine .
Si tu as une idée pour montrer l' avancement de la progression , sans faire peur , je prends ![]()
Dernière modification par iznobe (Le 12/10/2025, à 18:50)
Hors ligne
#375 Le 12/10/2025, à 20:52
- geole
Re : [ SCRIPT ] pour montage automatique partitions data , 3eme partie .
As-tu remarqué que je disais que les liens symboliques sont ratés.
D’autre part, comme tu avais beaucoup investi dans le fichier .config/*.dirs, je m’attendais à ce qu’il traite uniquement les répertoires qu’il contient,
Les écrans de l'installateur 26.04 https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne