#126 Le 08/04/2025, à 11:13
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Finalement , j' y reviens , pour couvrir les cas les plus courants que l' on trouve sur le forum , a savoir , pour le NTFS et le EXT4 .
je pense qu ' ensuite , je m' arreterais definitivement là , sauf , bien sur , si bug .
Comme je n' ai pas de partition NTFS en partage sur mon ordi , j ' aurais besoin de testeur pour cette version + NTFS , notamment pour les options a inclure dans la ligne du fstab , et la creation de la corbeille le cas échéant .
Voici la nouvelle version :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 :"
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # etiquette deja utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "erreur votre étiquette « $Label » est dejà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script ( essayez avec « sudo » )"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$3 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numero correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
echo "$PartFstype"
if [ -z "$PartLabel" ]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l ' étiquette de la partition « $Part » : [O/n] ?"
read -r Rep
if [[ "$Rep" == [YyoO]* ]]; then
label
else
Label="$PartLabel"
fi
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » : [O/n] ?"
read -r Rep2
done
if [[ "$Rep2" != [YyoO]* ]]; then
echo -e "Annulation par l' utilisateur !"
exit 0
elif [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n' existe pas !"
exit 1
elif [ "$(lsblk -no fstype "$Part")" != ext4 ]; then # vérifier qu ' elle est bien formatée en ext4
echo -e "la partition « $Part » n' est pas formatée en EXT4 ! "
exit 2
elif grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # verifier si la ligne existe dans le fstab
echo -e "une partition avec etiquette « $Label » est déjà traitée dans le fichier /etc/fstab , rien n' a donc été modifié !"
exit 3
elif grep -q "^$Part" /etc/mtab; then # verifier si la partition est deja montée
echo -e "La partition « $Part » est déjà montée !"
exit 4
elif (( "$(grep -q "$Label" /etc/fstab)" )); then # verifier si une etiquette du meme nom existe dans le fstab
echo -e "L ' étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
elif (( "$(grep -q "$(lsblk -no uuid "$Part")" /etc/fstab)" )); then # PartUUID est deja present dans fstab
echo -e "L UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
fi
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo " Script pour montage de partition de données terminé avec succès !"
fi
j ' ai commenté les lignes de modification du bas pour eviter tout modification hasardeuse sur le systeme , ca ne procede donc , en l' etat a aucune modification " .
Pour la corbeille , d' apres cette page : https://doc.ubuntu-fr.org/tutoriel/part … ows_ubuntu , les manipulations sont identiques a une partition au format ext3/4 ?
cela me parait curieux , du fait que NTFS ne gere pas les permissions de fichiers ... , à creuser donc .
Dernière modification par iznobe (Le 08/04/2025, à 18:10)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#127 Le 08/04/2025, à 18:14
- geole
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour iznobe
A mon avis, il faudra que le script liste les partitions NTFS pour qu'on puisse choisir une partition en NTFS puisque le script ne prévoit pas de reformater une partition EXT4 en NTFS
a@b:~$ sudo bash part_data.sh
bash: part_data.sh: Aucun fichier ou dossier de ce nom
a@b:~$ sudo bash /tmp/part_data.sh
1 ⇒ /dev/sda4 ssdUbuntu2404 ext4
2 ⇒ /dev/sdc5 4ToHOME ext4
3 ⇒ /dev/sdc11 4ToFamille ext4
4 ⇒ /dev/sdc13 4TossdUbuntu2404 ext4
5 ⇒ /dev/sdc15 4ToUbuntu ext4
6 ⇒ /dev/sdd9 Partage ext4
7 ⇒ /dev/sdd10
8 ⇒ /dev/md0
9 ⇒ /dev/md0
Choisissez le numero correspondant à votre future partition de données : 7
La partition « /dev/sdd10 » 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 :MonTest
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd10 » en y mettant pour étiquette « MonTest » : [O/n] ?
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd10 » en y mettant pour étiquette « MonTest » : [O/n] ?o
a@b:~$
Je remarque que tu ne devrais pas mettre en grand O puisque ce n'est pas implicite
Nota. Le choix est pourtant vaste, le serait-il trop?
sudo blkid | grep ntfs
/dev/sda1: LABEL="ssdWinboot" BLOCK_SIZE="512" UUID="796B23D11411E4F8" TYPE="ntfs" PARTUUID="cb53304e-01"
/dev/sda2: LABEL="ssdWinXP" BLOCK_SIZE="512" UUID="39A322D60E9DD672" TYPE="ntfs" PARTUUID="cb53304e-02"
/dev/sda3: LABEL="ssdWin10" BLOCK_SIZE="512" UUID="444881213A36C963" TYPE="ntfs" PARTUUID="cb53304e-03"
/dev/sdb1: LABEL="WinXP-2To" BLOCK_SIZE="512" UUID="45FF433E2AB93675" TYPE="ntfs" PARTUUID="c70ec70e-01"
/dev/sdb2: LABEL="NosDonnees" BLOCK_SIZE="512" UUID="09FD70E16774D4DD" TYPE="ntfs" PARTUUID="c70ec70e-02"
/dev/sdb3: LABEL="Win7-2To" BLOCK_SIZE="512" UUID="2A98523F98520A29" TYPE="ntfs" PARTUUID="c70ec70e-03"
/dev/sdc2: LABEL="4ToWinXP-2To" BLOCK_SIZE="512" UUID="6E695A832AB93675" TYPE="ntfs" PARTUUID="4fdedfd5-6fc7-4cb8-909d-0c3cf9d7bb43"
/dev/sdc3: LABEL="4ToWin7-2To" BLOCK_SIZE="512" UUID="2765294449F57338" TYPE="ntfs" PARTUUID="2e6c8125-2ac6-4a2c-8d11-a380149b87b5"
/dev/sdc4: LABEL="4tossdWinboot" BLOCK_SIZE="512" UUID="3A09CF611411E4F8" TYPE="ntfs" PARTUUID="9aee64e1-5a47-4e8d-96c7-88c2bf6caf58"
/dev/sdc6: LABEL="4ToNosDonnees" BLOCK_SIZE="512" UUID="79C4B3D0419CFB41" TYPE="ntfs" PARTLABEL="4ToToutleDisqueDe2To" PARTUUID="8ecc9207-a6e4-401a-a7b2-c0d5ae21ef3d"
/dev/sdc7: LABEL="4ToBigDisk" BLOCK_SIZE="512" UUID="09FD70E16774D4DD" TYPE="ntfs" PARTUUID="c618e3ab-373d-442d-9c11-f445586fdc92"
/dev/sdc8: LABEL="4ToReserve" BLOCK_SIZE="512" UUID="60DD43CF4E57701D" TYPE="ntfs" PARTUUID="dde38661-7b0f-4e60-a892-a2a5a9508981"
/dev/sdc9: LABEL="4TossdWin10" BLOCK_SIZE="512" UUID="50C957C93A36C963" TYPE="ntfs" PARTUUID="9ee0fe84-8fab-4fa9-bb1f-bb82b92ef2bd"
/dev/sdc12: LABEL="4tossdWin10-OLD" BLOCK_SIZE="512" UUID="08392AB63A36C963" TYPE="ntfs" PARTUUID="7a7a7768-644f-4f8f-b4a2-785910e27a56"
/dev/sdd5: LABEL="ntfs3g" BLOCK_SIZE="512" UUID="77CF9D07172322A7" TYPE="ntfs" PARTUUID="bf70a9dd-05"
/dev/sdd6: LABEL="ntfs3" BLOCK_SIZE="512" UUID="2047C0437587228F" TYPE="ntfs" PARTUUID="bf70a9dd-06"
/dev/sdd10: BLOCK_SIZE="512" UUID="1D829BA03322D7FB" TYPE="ntfs" PARTUUID="bf70a9dd-0a"
Dernière modification par geole (Le 08/04/2025, à 18:30)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#128 Le 08/04/2025, à 18:15
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
pas faux
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#129 Le 08/04/2025, à 18:53
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bon , je n' arrive pas à faire le " ou logique " dans la regex de $NF :
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ntfs || ext" \ # ne fonctionne pas ...
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs[,3]$/ )
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$3 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
Mieux comme ça , mais pas parfait :
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ntfs\|ext" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs[,3]$/ )
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$3 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
puisque j' obtiens :
awk: ligne de commande:2: avertissement : séquence d'échappement « \| » traitée comme un simple « | »
Dernière modification par iznobe (Le 08/04/2025, à 18:59)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#130 Le 08/04/2025, à 19:04
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
ok , ca parait correct maintenant pour :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 :"
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # etiquette deja utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "erreur votre étiquette « $Label » est dejà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script ( essayez avec « sudo » )"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ntfs|ext" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs[,3]$/ )
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$3 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numero correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l ' étiquette de la partition « $Part » : [O/n] ?"
read -r Rep
if [[ "$Rep" == [YyoO]* ]]; then
label
else
Label="$PartLabel"
fi
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » : [O/n] ?"
read -r Rep2
done
if [[ "$Rep2" != [YyoO]* ]]; then
echo -e "Annulation par l' utilisateur !"
exit 0
elif [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n' existe pas !"
exit 1
elif [ "$(lsblk -no fstype "$Part")" != ext4 ]; then # vérifier qu ' elle est bien formatée en ext4
echo -e "la partition « $Part » n' est pas formatée en EXT4 ! "
exit 2
elif grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # verifier si la ligne existe dans le fstab
echo -e "une partition avec etiquette « $Label » est déjà traitée dans le fichier /etc/fstab , rien n' a donc été modifié !"
exit 3
elif grep -q "^$Part" /etc/mtab; then # verifier si la partition est deja montée
echo -e "La partition « $Part » est déjà montée !"
exit 4
elif (( "$(grep -q "$Label" /etc/fstab)" )); then # verifier si une etiquette du meme nom existe dans le fstab
echo -e "L ' étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
elif (( "$(grep -q "$(lsblk -no uuid "$Part")" /etc/fstab)" )); then # PartUUID est deja present dans fstab
echo -e "L UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
fi
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo " Script pour montage de partition de données terminé avec succès !"
fi
Mais la condition :
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
ne fonctionne pas
il me dit que l ' etiquette est ntfs ...
Dernière modification par iznobe (Le 08/04/2025, à 19:15)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#131 Le 08/04/2025, à 19:43
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
@nany , on ne pourrait pas s ' inspirer de ça https://stackoverflow.com/questions/435 … ns-a-not-b , plutot que de :
$(lsblk -no path,label,fstype | awk -vi=-1 'BEGIN { print "declare -A ListPart" } \ $NF ~ "ntfs|ext" \ { j=0 ; if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs[,3]$/ ) { print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$3 } else { print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 } }')
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#132 Le 08/04/2025, à 20:02
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour,
Ligne 33 à corriger comme ceci :
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
Hors ligne
#133 Le 08/04/2025, à 20:07
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
on ne pourrait pas s ' inspirer de ça https://stackoverflow.com/questions/435 … ns-a-not-b
Je ne vois pas le rapport avec lsblk. ¯\_(ツ)_/¯
Hors ligne
#134 Le 08/04/2025, à 20:23
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Ligne 32, pourquoi $2 ~ /^ntfs[,3]$/ ?
Il existe un système de fichiers de type ntfs3 ?
Si oui, je verrais plutôt $2 ~ /^ntfs3?$/.
Sinon, $2 ~ /^ntfs$/
Hors ligne
#135 Le 08/04/2025, à 20:46
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
c' etait des tests ...
-----------------------------------------
Je ne vois pas le rapport avec lsblk. ¯\_(ツ)_/¯
je parle pas de la commande à proprement parler , mais plutot de la structure de mise en place du tableau , de la " conception " de celui-ci et de son parcours .
je retrouve pas mal de similtude avec ton code ( que j' ai beaucoup de mal à modifier / adapter ) dans la structure sur le code suivant qu ' a employer la personne du lien :
declare -a vid_files=() while IFS= read -r -d '' file do ! [[ "$file" =~ Robot ]] || continue vid_files+=("$file") done < <(find "${DIR}" -type f -regex ".*\.\(mkv\|avi\|ts\|mp4\|m2ts\)" -print0)
The -print0 option of find generates a null byte to separate the file names, and the -d '' option of read allows a null byte to be used as a record separator (both obviously go together).
You can get the list of files using "${vid_files[@]}" (double quotes are important to prevent word splitting). You can also iterate over the list easily :
for file in "${vid_files[@]}" do echo "$file" done
Notamment la création d ' un " point de parcours " qui permet donc de se passer du if else imbriqué au travers de " awk " , mais après , je n' ai pas suffisamment de recul pour dire si c' est bien ou pas / adaptable ou pas , pour lister les partitions au moyen de lsblk .
Toujours est il que si je veux inclure le NTFS comme format de partition géré par le script , j ' ai besoin de modifier ta partie de code , et sans la coloration syntaxique , c' est une vrai misère .
j ' ai essayé pas mal de chose , pour le moment , toujours en test , j ' en suis rendu là :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 :"
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # etiquette deja utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "erreur votre étiquette « $Label » est dejà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script ( essayez avec « sudo » )"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ntfs|ext" \
{
j=0 ;
if ($2 ~ "$NF")
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$3 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numero correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l ' étiquette de la partition « $Part » : [O/n] ?"
read -r Rep
if [[ "$Rep" == [YyoO]* ]]; then
label
else
Label="$PartLabel"
fi
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » : [O/n] ?"
read -r Rep2
done
if [[ "$Rep2" != [YyoO]* ]]; then
echo -e "Annulation par l' utilisateur !"
exit 0
elif [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n' existe pas !"
exit 1
elif [ "$(lsblk -no fstype "$Part")" != ext4 ]; then # vérifier qu ' elle est bien formatée en ext4
echo -e "la partition « $Part » n' est pas formatée en EXT4 ! "
exit 2
elif grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # verifier si la ligne existe dans le fstab
echo -e "une partition avec etiquette « $Label » est déjà traitée dans le fichier /etc/fstab , rien n' a donc été modifié !"
exit 3
elif grep -q "^$Part" /etc/mtab; then # verifier si la partition est deja montée
echo -e "La partition « $Part » est déjà montée !"
umount -v $Part
continue
elif (( "$(grep -q "$Label" /etc/fstab)" )); then # verifier si une etiquette du meme nom existe dans le fstab
echo -e "L ' étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
elif (( "$(grep -q "$(lsblk -no uuid "$Part")" /etc/fstab)" )); then # PartUUID est deja present dans fstab
echo -e "L ' UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
fi
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant acceder à votre partition en parcourant le dossier suivant : « /media/$Label/"$SUDO_USER"-"$Label" » .
fi
mais , je ne comprends pas pourquoi , il ne me met plus le PartLabel en champ " vide " .
et le résultat des courses , est que si je n' ai pas de LABEL , alors le script me répond :
que l ' étiquette est le FSTYPE , c' est logique en soi . mais bon , c' est pas ce que je veux obtenir du code ...
Dernière modification par iznobe (Le 08/04/2025, à 20:57)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#136 Le 08/04/2025, à 20:58
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
mais plutot de la structure de mise en place du tableau , de la " conception " de celui-ci et de son parcours
C’est totalement différent, ce n’est pas un tableau associatif.
mais , je ne comprends pas pourquoi , il ne me met plus le PartLabel en champ " vide " .
et le resultat des courses , est que si je n' ai pas de LABEL , alors le script me repond :
que l ' etiquette est le FSTYPE , c' est logique en soi . mais bon , c' est pas ce que je veux obtenir du code ...
Cf. le message #132.
Hors ligne
#137 Le 08/04/2025, à 21:06
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour,
Ligne 33 à corriger comme ceci :
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
Merci , pfff , l ' erreur vraiment relou quoi
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#138 Le 08/04/2025, à 21:11
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Apres modification , ca me donne toujours :
iznobe@iznobe-pc:/datas/iznobe/Scripts$ sudo bash mount_auto_part_data.sh
1 ⇒ /dev/sda1 Seagate_4T ext4
2 ⇒ /dev/sda3 liqhef ext4
3 ⇒ /dev/sda4 ubuntu_24.04 ext3
4 ⇒ /dev/sdb1 WD8 ext4
5 ⇒ /dev/sdb2 SAUV ext4
6 ⇒ /dev/sdc3 Data ext4
7 ⇒ /dev/sdd1 WD8PRO1_P1 ext4
8 ⇒ /dev/sdd2 WD8PRO1_P2 ext4
9 ⇒ /dev/sde1 WD8PRO2 ext4
10 ⇒ /dev/nvme0n1p1 windows_10 ntfs
11 ⇒ /dev/nvme0n1p2 ntfs
12 ⇒ /dev/nvme0n1p4 ntfs
13 ⇒ /dev/nvme0n1p5 LM_21_SSD ext4
14 ⇒ /dev/nvme0n1p6 U_20.04_SSD ext4
15 ⇒ /dev/nvme0n1p7 U_22.budgie_SSD ext4
16 ⇒ /dev/nvme0n1p8 U_24.04_SSD ext4
17 ⇒ /dev/nvme0n1p9 LM_SSD_NEW ext4
18 ⇒ /dev/nvme0n1p10 DEBIAN_XFCE ext4
19 ⇒ /dev/nvme0n1p11 Archlinux ext4
Choisissez le numero correspondant à votre future partition de données : 12
La partition « /dev/nvme0n1p4 » a l’étiquette « ntfs ».
Voulez-vous changer l ' étiquette de la partition « /dev/nvme0n1p4 » : [O/n] ?
Avec le script de mon message précédent et la ligne modifié avec champ3 => $2 que tu m' as indiquée .
je le remet ici au cas ou :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 :"
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # etiquette deja utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "erreur votre étiquette « $Label » est dejà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script ( essayez avec « sudo » )"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ntfs|ext" \
{
j=0 ;
if ($2 ~ "$NF")
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numero correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l ' étiquette de la partition « $Part » : [O/n] ?"
read -r Rep
if [[ "$Rep" == [YyoO]* ]]; then
label
else
Label="$PartLabel"
fi
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » : [O/n] ?"
read -r Rep2
done
if [[ "$Rep2" != [YyoO]* ]]; then
echo -e "Annulation par l' utilisateur !"
exit 0
elif [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n' existe pas !"
exit 1
elif [ "$(lsblk -no fstype "$Part")" != ext4 ]; then # vérifier qu ' elle est bien formatée en ext4
echo -e "la partition « $Part » n' est pas formatée en EXT4 ! "
exit 2
elif grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # verifier si la ligne existe dans le fstab
echo -e "une partition avec etiquette « $Label » est déjà traitée dans le fichier /etc/fstab , rien n' a donc été modifié !"
exit 3
elif grep -q "^$Part" /etc/mtab; then # verifier si la partition est deja montée
echo -e "La partition « $Part » est déjà montée !"
umount -v $Part
continue
elif (( "$(grep -q "$Label" /etc/fstab)" )); then # verifier si une etiquette du meme nom existe dans le fstab
echo -e "L ' étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
elif (( "$(grep -q "$(lsblk -no uuid "$Part")" /etc/fstab)" )); then # PartUUID est deja present dans fstab
echo -e "L ' UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
fi
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant acceder à votre partition en parcourant le dossier suivant : « /media/$Label/"$SUDO_USER"-"$Label" » .
fi
serait ce à cause du changement de la regex ? :
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ntfs|ext" \
{
j=0 ;
if ($2 ~ "$NF")
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
Dernière modification par iznobe (Le 08/04/2025, à 21:16)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#139 Le 08/04/2025, à 22:14
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Ligne 32 :
if ($2 ~ $NF)
Hors ligne
#140 Le 09/04/2025, à 01:09
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
ok , alors voici , plus qu ' a tester ce que ca dit comme ca :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 :"
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # etiquette deja utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "erreur votre étiquette « $Label » est dejà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script ( essayez avec « sudo » )"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numero correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l'étiquette de la partition « $Part » : [O/n] ?"
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
;;
Y|y|O|o|*)
label
;;
esac
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » : [O/n] ?"
read -r Rep2
done
case "$Rep2" in
N|n)
echo -e "Annulation par l' utilisateur !"
exit 0
;;
Y|y|O|o|*)
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n' existe pas !"
exit 1
elif [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu ' elle est bien formatée en ext4
#elif [ "$PartFstype" =~ "$NF"]; then
echo -e "la partition « $Part » n' est pas au bon format ! "
exit 2
elif grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # verifier si la ligne existe dans le fstab
echo -e "une partition avec etiquette « $Label » est déjà traitée dans le fichier /etc/fstab , rien n' a donc été modifié !"
exit 3
elif grep -q "^$Part" /etc/mtab; then # verifier si la partition est deja montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
#exit 4
elif (( "$(grep -q "$Label" /etc/fstab)" )); then # verifier si une etiquette du meme nom existe dans le fstab
echo -e "L ' étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
elif (( "$(grep -q "$(lsblk -no uuid "$Part")" /etc/fstab)" )); then # PartUUID est deja present dans fstab
echo -e "L ' UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
fi
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant acceder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label » ."
fi
;;
esac
toujours 2 questions en suspens :
pour la corbeille d ' une partition au format NTFS , est ce utile de chmod + chown la corbeille ???
et quelles sont les options à placer dans le fstab pour une intégration de la partition NTFS en " standard " ?
Et au niveau du code , lorsque j' appuie sur entrée à la question " Voulez-vous procéder au montage maintenant pour la partition « .... " , ca n' enclenche pas comme si j' avais mis " o " , mais je ne vois pas trop pourquoi .
Dernière modification par iznobe (Le 09/04/2025, à 01:36)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#141 Le 09/04/2025, à 07:48
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour,
toujours 2 questions en suspens :
pour la corbeille d ' une partition au format NTFS , est ce utile de chmod + chown la corbeille ???
et quelles sont les options à placer dans le fstab pour une intégration de la partition NTFS en " standard " ?
Je ne sais pas.
Et au niveau du code , lorsque j' appuie sur entrée à la question " Voulez-vous procéder au montage maintenant pour la partition « .... " , ca n' enclenche pas comme si j' avais mis " o " , mais je ne vois pas trop pourquoi .
C’est à cause de :
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » : [O/n] ?"
read -r Rep2
done
Tant que Rep2 est vide, on reste dans la boucle.
Mais, puisqu’on traite la réponse avec un case, plus besoin de tester la présence de cette réponse.
Du coup :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
;;
*)
label
;;
esac
fi
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
case "$Rep2" in
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
*)
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab
echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
exit 3
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
#exit 4
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
fi
;;
esac
J’ai aussi :
supprimé les elif en fin de traitement (chaque cas devant pouvoir être testé) ;
pris en compte ext2 (peut-être faudrait-il traiter ce cas à part) ;
déplacé les lignes en double dans « construction des éléments » ;
corrigé les erreurs typographiques (ça piquait un peu les yeux) ;
unifié les indentations (choix de deux espaces en remplacement des tabulations) ;
et peut-être encore deux ou trois petites choses.
Dernière modification par nany (Le 09/04/2025, à 07:54)
Hors ligne
#142 Le 09/04/2025, à 08:56
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour nany ,
Tant que Rep2 est vide, on reste dans la boucle.
Mais, puisqu’on traite la réponse avec un case, plus besoin de tester la présence de cette réponse.
Arf , exact , a force d' avoir le nez dedans , on ne voit plus les choses parfois pourtant evidente ...
J’ai aussi :
supprimé les elif en fin de traitement (chaque cas devant pouvoir être testé) ;
Bof , si une erreur apparait , et qu ' un exit est donc atteint , if ou elif , le resultat est le meme => fin du script .
pris en compte ext2 (peut-être faudrait-il traiter ce cas à part) ;
je ne sais pas où trouver de la doc , ni si c' est pertinent .
déplacé les lignes en double dans « construction des éléments » ;
Merci , ca m' evitera de le faire , je n ' avais pas encore fini cette partie .
je préféré les tabulations , plus facile pour moi de gerer l ' indentation
je regarderai plus en détails , surement ce soir .
pourquoi avoir mis :
case "$Rep2" in
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
*)
...
si l' utilisateur tape " b " , ca ne va pas valider ?
il n ' y a pas moyen de faire :
cas Nn => exit
cas YyOo et touche entrée , on poursuit le traitement
cas autre chose => on remet la question
?
Dernière modification par iznobe (Le 09/04/2025, à 09:05)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#143 Le 09/04/2025, à 09:26
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Bof , si une erreur apparait , et qu ' un exit est donc atteint , if ou elif , le resultat est le meme => fin du script .
J’avais testé pour le cas de l’exit 4 qui est commenté et ensuite je devais avoir l’exit 6 mais ce n’était pas le cas à cause des elif donc je les ai tous supprimés.
je préféré les tabulations , plus facile pour moi de gerer l ' indentation
Chacun son style. Personnellement, j’ai choisi les espaces pour avoir quelque chose d’uniforme quel que soit l’éditeur de texte (ou IDE) où il est possible de régler des tailles de tabulations différentes suivant les logiciels.
pourquoi avoir mis :
case "$Rep2" in N|n) echo -e "Annulation par l’utilisateur !" exit 0 ;; *) ...
si l' utilisateur tape " b " , ca ne va pas valider ?
Si, mais c’était déjà le cas avec Y|y|O|o|* (donc ce qui précédait l’astérisque était inutile).
D’ailleurs, ça valide aussi si on répond « non » en toutes lettres.
Hors ligne
#144 Le 09/04/2025, à 10:04
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
pour l' ' exit 4 ' , je me suis dis que c' était mieux de démonter la partition et de poursuivre , plutôt que d' arrêter le script comme au départ , vu que 9 utilisateurs sur 10 ont la partition déjà montée ailleurs et que en fait , il n' y a pas lieux d' interrompre le processus pour cela , vu que même si la partition est déjà montée ailleurs , ce n' empêche pas le script de se dérouler normalement . ( en tout cas à ma connaissance )
Si, mais c’était déjà le cas avec Y|y|O|o|* (donc ce qui précédait l’astérisque était inutile).
D’ailleurs, ça valide aussi si on répond « non » en toutes lettres.
dans ce cas , ne vaudrait il pas mieux mettre :
case "$Rep2" in
O|o|Y|y)
...
;;
*)
echo -e "Annulation par l’utilisateur !"
exit 0
?
Mais ca ne validera pas si on met " rien " et entrée , si j' ai bien compris ?
Dernière modification par iznobe (Le 09/04/2025, à 10:13)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#145 Le 09/04/2025, à 10:27
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
ok , je pense avoir trouvé la solution :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
;;
O|o|Y|y|'')
label
;;
*)
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n]"
read -r Rep
;;
esac
fi
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
case "$Rep2" in
O|o|Y|y|'')
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab
echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
exit 3
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
fi
;;
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
*)
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
;;
esac
j' ai modifié pour les 2 cases .
ha ben , en fait non , il prend bien en compte , mais ne repart pas au debut du " case " ...
Dernière modification par iznobe (Le 09/04/2025, à 10:30)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#146 Le 09/04/2025, à 10:50
- geole
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour iznobe
Tests réalisés avec cette version de ton script. J'ai décommenté quelques lignes
a@b:/tmp$ cat part_data.sh
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
;;
*)
label
;;
esac
fi
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
case "$Rep2" in
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
*)
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab
echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
exit 3
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
#exit 4
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
echo " FSTYPE=$PartFstype"
e2label "$Part" "$Label"
echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
ntfslabel "$Part" "$Label"
echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
mkdir /media/"$Label" 2>/dev/null
systemctl daemon-reload
mount -a 2>/dev/null
mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
fi
;;
esac
a@b:/tmp$
Je n'avais pas fait gaffe que tu mettais deux fois le montage NTFS. j''ai laissé commenté la création de la corbeille.
En voici le résultat
lsblk -fe7 /dev/sdd
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdd
......
├─sdd10 ext4 1.0 TESText4 a610cb2d-c4c3-472e-bbd3-821f947a7735 907,4M 0% /media/TESText4
├─sdd11 ext3 1.0 TESText3 0a635076-752c-4677-a1f7-3c86f0e827ff 923,4M 0% /media/TESText3
├─sdd12 ext2 1.0 TESText2 c62eea87-2ec3-4b9d-9634-90d35f09aa32 955,4M 0% /media/TESText2
├─sdd13 ntfs TESTntfs1 626EF37C5393234B 1018,4M 1% /media/TESTntfs1
└─sdd14 ntfs TESTntfs2 153D4BA3118EA6E2 1018,4M 1% /media/TESTntfs2
a@b:/tmp$ mount |tail
......
/dev/sdd10 on /media/TESText4 type ext4 (rw,relatime)
/dev/sdd11 on /media/TESText3 type ext3 (rw,relatime)
/dev/sdd12 on /media/TESText2 type ext2 (rw,relatime)
/dev/sdd13 on /media/TESTntfs1 type fuseblk (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)
/dev/sdd14 on /media/TESTntfs2 type fuseblk (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)
Après utilisation de la seconde partition en NTFS, la corbeille est automatiquement créée
ls -als /media/TESTntfs1
total 8
4 drwxrwxrwx 1 a a 4096 avril 9 10:19 .
4 drwxr-xr-x 23 root root 4096 avril 9 10:19 ..
0 drwxrwxrwx 1 a a 0 avril 9 10:19 a-TESTntfs1
ls -al/media/TESTntfs2
total 8
4 drwxrwxrwx 1 a a 4096 avril 9 10:24 .
4 drwxr-xr-x 23 root root 4096 avril 9 10:19 ..
0 drwxrwxrwx 1 a a 144 avril 9 10:23 a-TESTntfs2
0 drwxrwxrwx 1 a a 240 avril 9 10:24 .Trash-1000
a@b:/media/TESTntfs2$ ls -al /media/TESTntfs2/.Trash-1000/files
total 1
0 drwxrwxrwx 1 a a 152 avril 9 10:24 .
0 drwxrwxrwx 1 a a 240 avril 9 10:24 ..
1 -rwxrwxrwx 1 a a 435 nov. 18 2023 Iventoy.txt
Je te donne un avis sur NTFS3
- Permet d'accéder aux fichiers compressés de windows. Donc certainement nécessaire.
- On voit souvent plein de montages NTFS3 compliqués
- Je considère que NTFS3 est buggé.. Il m'est arrivé un gros problème. Dans mon portable, il y a deux windows.
- Le premier C: est monté en NTFS3
- Le second C: est monté en NTFS
- Le premier windows s'est trouvé cassé deux fois avec obligation de restauration. Sans que je comprenne pourquoi. Je soupcçonne sans preuve NTFS3
Je relance le test avec uniquement NTFS.
J'ai du virer sys_immutable pour avoir le droit d'écrire.
a@b:~$ tail -1 /etc/fstab
LABEL=TESTntfs3 /media/TESTntfs3 ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
a@b:~$ mount |tail -1
/dev/sdd15 on /media/TESTntfs3 type ntfs3 (rw,relatime,uid=1000,gid=1000,nohidden,iocharset=utf8,x-gvfs-show)
a@b:~$
a@b:~$ ls -al /media/TESTntfs3
total 8
drwxrwxrwx 1 a a 4096 avril 9 11:16 .
drwxr-xr-x 25 root root 4096 avril 9 11:03 ..
drwxr-xr-x 1 a a 0 avril 9 11:15 a-TESTntfs3
drwx------ 1 a a 0 avril 9 11:16 .Trash-1000
a@b:~$ ls -al /media/TESTntfs3/.Trash-1000
total 4
drwx------ 1 a a 0 avril 9 11:16 .
drwxrwxrwx 1 a a 4096 avril 9 11:16 ..
drwx------ 1 a a 0 avril 9 11:16 files
drwx------ 1 a a 0 avril 9 11:16 info
a@b:~$ ls -al /media/TESTntfs3/.Trash-1000/files
total 4
drwx------ 1 a a 0 avril 9 11:16 .
drwx------ 1 a a 0 avril 9 11:16 ..
-rwxrwxrwx 1 a a 435 nov. 18 2023 Iventoy.txt
a@b:~$
Dernière modification par geole (Le 09/04/2025, à 11:20)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#147 Le 09/04/2025, à 12:19
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Salut et merci geole pour le test
j' avais mis 2 lignes pour le montage NTFS , ne sachant pas trop quoi mettre comme options dedans vu que la question portait sur cela aussi .
du coup j ' ai modifié en ne laissant que la plus complete , version ntfs3 et enlevé l ' option " immuable " .
je suppose que le chmod / chown de la corbeille sur du NTFS est donc inutile .
Bref , voici le " nouveau " script avec boucle infinie pour les questions + simplifications du code pour celles-ci :
l' indentation n' est probablement pas correcte , je modifierais avant d' injecter dans le 1er message si besoin .
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while true; do
read -p "Voulez-vous changer l’étiquette de la partition « $Part » ? [o/n] " -n 1 -r
if [[ "$REPLY" =~ ^[YyOo'']$ ]]; then
label
break
elif [[ "$REPLY" =~ ^[N|n]$ ]]; then
Label="$PartLabel"
break
fi
done
fi
while true; do
read -p "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [o/n] " -n 1 -r
echo
if [[ "$REPLY" =~ ^[YyOo'']$ ]]; then
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab
echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
exit 3
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 4
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 5
fi
# construction des éléments :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
echo " FSTYPE=$PartFstype"
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
break
fi
elif [[ "$REPLY" =~ ^[N|n]$ ]]; then
echo -e "Annulation par l’utilisateur !"
exit 0
fi
done
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#148 Le 09/04/2025, à 12:25
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
ce n' empêche pas le script de se dérouler normalement . ( en tout cas à ma connaissance )
Pas dans le cas de mon test : partition déjà inscrite dans le fstab avec la référence de l’UUID (d’ailleurs le démontage renvoie une erreur comme quoi la cible est active).
ok , je pense avoir trouvé la solution :
…
ha ben , en fait non, il prend bien en compte , mais ne repart pas au debut du " case " ...
Dans ce cas, il faut remettre les boucles while en les fermant aux bons endroits :
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "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 : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ $Label == "${ListPart[$n,1]}" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
;;
Y|y|O|o|"")
label
break
;;
*)
unset Rep
;;
esac
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
case "$Rep2" in
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab
echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
exit 3
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 5
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 6
fi
# construction des éléments :
echo " FSTYPE=$PartFstype"
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
#e2label "$Part" "$Label"
#echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
return
elif [[ "$PartFstype" == "ntfs" ]]; then
#ntfslabel "$Part" "$Label"
#echo "LABEL=$Label /media/$Label ntfs defaults,rw,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
#echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,sys_immutable,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
return
fi
#mkdir /media/"$Label" 2>/dev/null
#systemctl daemon-reload
#mount -a 2>/dev/null
#mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
#mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
#chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
fi
break
;;
*)
unset Rep2
;;
esac
done
[edit]Ah ben tu as fait des modifications entre temps.[/edit]
Dernière modification par nany (Le 09/04/2025, à 12:28)
Hors ligne
#149 Le 09/04/2025, à 12:34
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
oui je trouve que c' est finalement plus " abordable " et lisible comme cela . j ' espere juste ne pas avoir oublié de break
boucle infinie + break pour sortir en cas de reponse attendue .
Faut que je regarde en détail pour cette histoire de partition deja montée .
tu avais choisie une partition systeme peut etre ( ou /home )? vu qu on a pas encore traité le cas ...
sauf que je ne vois pas trop comment ejecter tout les cas possibles de l ' enumeration des partitions . ( /boot et touti cuenti )
Dernière modification par iznobe (Le 09/04/2025, à 12:38)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#150 Le 09/04/2025, à 12:58
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
je trouve que c' est finalement plus " abordable " et lisible comme cela .
Bof, je préfère ma version en conservant les case.
Et, non, tu n’as pas oublié de break mais le dernier devrait être après le if/fi au lieu d’être à l’intérieur.
tu avais choisie une partition systeme peut etre ( ou /home )?
Une partition de données montée dans /media/data avec des liens qui pointent vers Documents etc.
Le message est : « umount: /media/data: la cible est active. »
Hors ligne