#26 Le 27/12/2021, à 21:09
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour geole et merci pour la correction mais je ne suis pas sur que ce soit vraiment le bug , j2 c ' est le dernier argument sans le chemin non ?
du coup ca teste que le dernier argument n' as pas plus de 247 caracteres , ou je me trompe ?
et la 2eme ligne verifie que le nom complet (avec chemin donc ) ne depasse pas 323283 .
#Vérifions si la longueur n'est pas excessive
if [[ ${#j2} -ge 248 ]]; then Long=$(($Long+1)); echo $j >>/tmp/LongFic ; fi
if [[ ${#j} -ge 32384 ]]; then Long=$(($Long+1)); echo $j >>/tmp/LongFic ; fi
juste une question en passant , pourquoi multiplier les variables , ca n' a pas grand interet dans ce script ?
a mon avis c' est cette ligne qui pose probleme :
if [[ " ${Exclus[@]} " =~ $j2 ]]; then j="$j""_" ; fi
Mais , je comprends pas bien la 1ere insctruction , mais presque sur que le soucis est dans celle-ci
la 2eme dis simplement de transformer la variable $j elle meme en ajoutant un "_" a la fin .
d' ailleurs on voit clairement dans la sortie que ca correspond bien aux caracteres exclus et non a la suite de caracteres :
on va renommer ce répertoire avec la commande suivante : mkdir 'a_'
on va renommer ce répertoire avec la commande suivante : mkdir 'u_'
on va renommer ce répertoire avec la commande suivante : mkdir 'x_'
et uniquement pour des dossiers .
Dernière modification par iznobe (Le 27/12/2021, à 21:22)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#27 Le 28/12/2021, à 03:08
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
+ simplification des tests pour la gestion des espaces , merci a @watael et @MicP pour leur aide a ce sujet : https://forum.ubuntu-fr.org/viewtopic.p … #p22519336
+ suppresion de variable inutiles
+ simplification des tests de suppression des caracteres interdits de windows .
vitesse grandement amelioré !
Reste encore a corrigé le soucis avec les noms interdits , la prise en charge de fichiers dans certains conditions ne se fait pas , et la suppresion des repertoires vides a la fin de la boucle , qui semble etre a faire aussi .
Bien sur toute autre amelioration , implementation est bienvenue
Dernière modification par iznobe (Le 29/12/2021, à 14:30)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#28 Le 28/12/2021, à 13:10
- geole
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
a mon avis c' est cette ligne qui pose probleme :
if [[ " ${Exclus[@]} " =~ $j2 ]]; then j="$j""_" ; fi
Bonjour
Un mauvais test a partir d'un exemple incompris
Il compare caractère par caractère.
Je redeviens plus classique en boucle
for t in "${Exclus[@]}"; do
if [[ "$t" = "$j2" ]]; then j="$j""_" ; fi
done
Tu noteras que j'ai supprimé la variable k pour rester avec j comme tu avais signalé son inutilité.
Dernière modification par geole (Le 28/12/2021, à 13:11)
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
#29 Le 28/12/2021, à 13:29
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
effectivement avec la boucle pour les exclus , on arrive a quelquechose qui fonctionne pas trop mal , a tester plus en profondeur .
je laisse les commentaires pour faciliter la comprehension et les modifications , si certains sont motivés pour tester et / ou ameliorer ce script .
# $i = nom complet rep ou fichier original
# $i1 = chemin relatif du repertoire original
# $j = nom complet rep ou fichier modifié
# $j1 = chemin relatif du repertoire modifié
# $j2 = nom dernier argument modifié
shopt -s globstar
modif_activ=rue;
###Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
Long=0; Nbrep=0; Nbfilemodified=0; Nbrepmodified=0; NbfileNOTmodified=0; Debut=$(echo $(date +%s));
echo "liste des fichiers n ' ayant pas pu etre modifiés :" > /tmp/nomodifs
echo "-------------------" > /tmp/modifs
for i in **/*; do
Nbrep=$(($Nbrep+1))
# traitement des espaces
j=$(echo $i | sed 's@ */ *@/@g')
# remplacement d'un maxima de caractères interdits par windows ><\:"|?*
j=$(echo "$j" | tr '><"|?*:\\' '!!!!!!!%') # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
# Vérifions si le nom n'est pas interdit. Récupération du dernier argument
j2=$(echo "$j" | grep -o '[^/]*$' )
#if [[ ${Exclus[@]} =~ "$j2" ]]; then j=$(echo "$j""_") ; echo "$j" ; fi
for t in "${Exclus[@]}"; do
if [[ "$t" = "$j2" ]]; then j="$j""_" ; fi
done
# Vérifions si la longueur n'est pas excessive
if [[ ${#j2} -ge 248 || ${#j} -ge 32384 ]] ; then
if [[ $long -eq 0 ]]; then echo "[url]https://www.pcastuces.com/pratique/astuces[/url]" > /tmp/LongFic ; fi
Long=$(($Long+1))
echo "$Long : $j" >> /tmp/LongFic
fi
if [[ $i != $j ]]; then # si il y a un changement a effectuer
if test -d "$i" ; then # si c' est un dossier
if test -e "$j" ; then # on verifie si il existe un dossier du meme nom avant de renommer
# si deja un dossier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un dossier du meme nom existe deja :'$j' impossible de renommer '$i'" >> /tmp/nomodifs
else # si pas de dossier du meme nom , on renomme
echo "on va renommer ce répertoire avec la commande suivante : mkdir '$j'"
if [ "$modif_activ" = true ] ; then
mkdir "$j"
if test -e "$j" ; then # si la creation du repertoire a reussi
# enregistrement des changements
echo "$Nbrep CREERREP : mkdir '$j'" >> /tmp/modifs
Nbrepmodified=$(($Nbrepmodified+1))
# on deplace tout le contenu de l' ancien repertoire dans le nouveau
# creer une fonction de la boucle et l' appeler ici a la place .
# for x in $i; do
# echo "mv $x $j" >> /tmp/modifs
# done
# echo "rmdir $i" >> /tmp/modifs
else
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour repertoire : '$i'" >> /tmp/nomodifs
fi
fi
fi
elif test -f "$i" ; then # si c est un fichier
# on verifie si il existe un fichier du meme nom avant de renommer
if test -e "$j" ; then # si deja un fichier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un fichier du meme nom existe deja :\'$j\' impossible de renommer \'$i\'" >> /tmp/nomodifs
else # si pas de fichier du meme nom , on renomme
# chemin relatif du repertoire original
i1=$(echo "$i" | rev | cut -d/ --complement -s -f1 | rev)
# Récupérons le chemin apres modif
j1=$(echo "$j" | rev | cut -d/ --complement -s -f1 | rev) # donne le chemin relatif du repertoire modifié .
if [[ $i1 != $j1 ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
# dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
j=$(echo "$j1/$j2")
else # sinon il suffit de ne pas tenir compte de l' arboresecence puisqu ' elle est identique
# recuperation nom original du dernier argument
i=$(echo "$i" | grep -o '[^/]*$' ) # on utilise juste le nom de fichier original pour la src
j=$(echo "$j" | grep -o '[^/]*$' ) # on utilise que le nom du fichier modifié pour la destination
fi
echo "on va renommer ce fichier avec la commande suivante : mv '$i' '$j'"
if [ "$modif_activ" = true ] ; then
mv "$i" "$j"
# puis on verifie que le fichier renommé existe bien :
if test -e "$j" ; then # si le fichier existe on incremente
# enregistrement des changements
echo "$Nbrep RENOM : mv '$i' en : '$j'" >> /tmp/modifs
Nbfilemodified=$(($Nbfilemodified+1))
else # sinon => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour fichier : '$i'" >> /tmp/nomodifs
fi
fi
fi
else # sinon => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour : '$i'" >> /tmp/nomodifs
fi
fi
done
echo ""
echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-$Debut)) secondes."
echo ""
echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'"
echo ""
if [[ $Long > 0 ]]; then echo "vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : for i in **/*; do find . -type d -empty -print -delete ; done"
cela dit , si quelqu ' un a une version pour renommer les fichiers de la liste Eclus sans passer par une boucle , ca serait top
Dernière modification par iznobe (Le 28/12/2021, à 14:59)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#30 Le 28/12/2021, à 13:50
- geole
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Tu avais signalé des problèmes pour les fichiers avec des [ et des ]
@a:~/TEST$
a@a:~/TEST$
a@a:~/TEST$ touch " fICHIER [entre] crochet "
a@a:~/TEST$
a@a:~/TEST$ touch " fICHIER [ entre ' ] crochets "
a@a:~/TEST$ ls -als
total 8
4 drwxrwxr-x 2 a a 4096 déc. 28 12:39 .
4 drwxr-xr-x 20 a a 4096 déc. 28 11:31 ..
0 -rw-rw-r-- 1 a a 0 déc. 28 12:38 ' fICHIER [entre] crochet '
0 -rw-rw-r-- 1 a a 0 déc. 28 12:39 ' fICHIER [ entre '\'' ] crochets '
a@a:~/TEST$
a@a:~/TEST$
Cependant, le script se lance bien et le résultat est celui prévu.
on va renommer ce répertoire/fichier avec cette commande mv -n ' fICHIER [ entre ' ] crochets ' fICHIER [ entre ' ] crochets
a@a:~/TEST$ if [[ $Long > 0 ]]; then echo vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic ; fi
a@a:~/TEST$ echo $Nbrep répertoires et fichiers traités en $(($(date +%s)-$Debut)) secondes.
2 répertoires et fichiers traités en 5 secondes.
a@a:~/TEST$ ls -ls
total 0
0 -rw-rw-r-- 1 a a 0 déc. 28 12:44 'fICHIER [entre] crochet'
0 -rw-rw-r-- 1 a a 0 déc. 28 12:45 'fICHIER [ entre '\'' ] crochets'
Le problème semble après, il veut encore renommer....
Il est impossible de changer le nom de ce fichier/dossier 'fICHIER [entre] crochet' car présence de doublon au niveau fichier
Il est impossible de changer le nom de ce fichier/dossier 'fICHIER [ entre ' ] crochets' car présence de doublon au niveau fichier
en plus court....
Il est impossible de changer le nom de ce fichier/dossier '[fic]' car présence de doublon au niveau fichier
a@a:~/TEST$ if [[ $Long > 0 ]]; then echo vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic ; fi
a@a:~/TEST$ echo $Nbrep répertoires et fichiers traités en $(($(date +%s)-$Debut)) secondes.
1 répertoires et fichiers traités en 40 secondes.
a@a:~/TEST$ ls -ls
total 0
0 -rw-rw-r-- 1 a a 0 déc. 28 12:58 '[fic]'
Idée 1, si le nom contient un crochet on ne fait pas le test de présence et on laisse la commande mv qui ralera ou pas
Idée 2, on ne fait jamais le test et on récupère les erreurs de l'exécution s'il y en a....
Dernière modification par geole (Le 28/12/2021, à 14:05)
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
#31 Le 28/12/2021, à 14:28
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
chez moi il fonctionne des 2 manieres l ' une ou l ' autre au choix voici le resultat en un copier coller :
iznobe@iznobe-PC:~/Scripts/teste$ for i in **/*; do
> Nbrep=$(($Nbrep+1))
> # traitement des espaces
> j=$(echo $i | sed 's@ */ *@/@g')
>
> # remplacement d'un maxima de caractères interdits par windows ><\:"|?*
> j=$(echo "$j" | tr '><"|?*:\\' '!!!!!!!%') # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
>
> # Vérifions si le nom n'est pas interdit. Récupération du dernier argument
> j2=$(echo "$j" | grep -o '[^/]*$' )
> #if [[ ${Exclus[@]} =~ "$j2" ]]; then j=$(echo "$j""_") ; echo "$j" ; fi
> for t in "${Exclus[@]}"; do
> if [[ "$t" = "$j2" ]]; then j="$j""_" ; fi
> done
>
> # Vérifions si la longueur n'est pas excessive
> if [[ ${#j2} -ge 248 || ${#j} -ge 32384 ]] ; then
> if [[ $long -eq 0 ]]; then echo "[url]https://www.pcastuces.com/pratique/astuces[/url]" > /tmp/LongFic ; fi
> Long=$(($Long+1))
> echo "$Long : $j" >> /tmp/LongFic
> fi
>
> if [[ $i != $j ]]; then # si il y a un changement a effectuer
>
> if test -d "$i" ; then # si c' est un dossier
> if test -e "$j" ; then # on verifie si il existe un dossier du meme nom avant de renommer
> # si deja un dossier du meme nom , on stocke l' erreur
> NbfileNOTmodified=$(($NbfileNOTmodified+1))
> echo "$Nbrep un dossier du meme nom existe deja :'$j' impossible de renommer '$i'" >> /tmp/nomodifs
> else # si pas de dossier du meme nom , on renomme
> echo "on va renommer ce répertoire avec la commande suivante : mkdir '$j'"
> if [ "$modif_activ" = true ] ; then
> mkdir "$j"
> if test -e "$j" ; then # si la creation du repertoire a reussi
> # enregistrement des changements
> echo "$Nbrep CREERREP : mkdir '$j'" >> /tmp/modifs
> Nbrepmodified=$(($Nbrepmodified+1))
> # on deplace tout le contenu de l' ancien repertoire dans le nouveau
> # creer une fonction de la boucle et l' appeler ici a la place .
> for x in $i; do
> echo "mv $x $j" >> /tmp/modifs
> done
> echo "rmdir $i" >> /tmp/modifs
>
> else
> NbfileNOTmodified=$(($NbfileNOTmodified+1))
> echo "$Nbrep erreur inconnue pour repertoire : '$i'" >> /tmp/nomodifs
> fi
> fi
> fi
> elif test -f "$i" ; then # si c est un fichier
> # on verifie si il existe un fichier du meme nom avant de renommer
> if test -e "$j" ; then # si deja un fichier du meme nom , on stocke l' erreur
> NbfileNOTmodified=$(($NbfileNOTmodified+1))
> echo "$Nbrep un fichier du meme nom existe deja :\'$j\' impossible de renommer \'$i\'" >> /tmp/nomodifs
> else # si pas de fichier du meme nom , on renomme
> # chemin relatif du repertoire original
> i1=$(echo "$i" | rev | cut -d/ --complement -s -f1 | rev)
> # Récupérons le chemin apres modif
> j1=$(echo "$j" | rev | cut -d/ --complement -s -f1 | rev) # donne le chemin relatif du repertoire modifié .
> if [[ $i1 != $j1 ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
> # dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
> j=$(echo "$j1/$j2")
> else # sinon il suffit de ne pas tenir compte de l' arboresecence puisqu ' elle est identique
> # recuperation nom original du dernier argument
> i=$(echo "$i" | grep -o '[^/]*$' ) # on utilise juste le nom de fichier original pour la src
> j=$(echo "$j" | grep -o '[^/]*$' ) # on utilise que le nom du fichier modifié pour la destination
> fi
> echo "on va renommer ce fichier avec la commande suivante : mv '$i' '$j'"
> if [ "$modif_activ" = true ] ; then
> mv "$i" "$j"
> # puis on verifie que le fichier renommé existe bien :
> if test -e "$j" ; then # si le fichier existe on incremente
> # enregistrement des changements
> echo "$Nbrep RENOM : mv '$i' en : '$j'" >> /tmp/modifs
> Nbfilemodified=$(($Nbfilemodified+1))
> else # sinon => erreur
> NbfileNOTmodified=$(($NbfileNOTmodified+1))
> echo "$Nbrep erreur inconnue pour fichier : '$i'" >> /tmp/nomodifs
> fi
> fi
> fi
> else # sinon => erreur
> NbfileNOTmodified=$(($NbfileNOTmodified+1))
> echo "$Nbrep erreur inconnue pour : '$i'" >> /tmp/nomodifs
> fi
> fi
>
> done
on va renommer ce fichier avec la commande suivante : mv 'aux' 'aux_'
on va renommer ce fichier avec la commande suivante : mv ' reeee ' 'reeee'
iznobe@iznobe-PC:~/Scripts/teste$ echo ""
iznobe@iznobe-PC:~/Scripts/teste$ echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-$Debut)) secondes."
12 répertoires et fichiers traités, 0 répertoires modifiés, 0 fichiers modifiés, 0 répertoires et fichiers n ' ayant pas pu etre modifiés en 0 secondes.
iznobe@iznobe-PC:~/Scripts/teste$ echo ""
iznobe@iznobe-PC:~/Scripts/teste$ echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'"
liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'
iznobe@iznobe-PC:~/Scripts/teste$ echo ""
iznobe@iznobe-PC:~/Scripts/teste$ if [[ $Long > 0 ]]; then echo "vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic" ; fi
iznobe@iznobe-PC:~/Scripts/teste$
iznobe@iznobe-PC:~/Scripts/teste$ echo "pour supprimer les dossiers vides , copiez collez la commande suivante : for i in **/*; do find . -type d -empty -print -delete ; done"
pour supprimer les dossiers vides , copiez collez la commande suivante : for i in **/*; do find . -type d -empty -print -delete ; done
iznobe@iznobe-PC:~/Scripts/teste$
Dernière modification par iznobe (Le 28/12/2021, à 14:35)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#32 Le 28/12/2021, à 14:41
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
il ne traite pas...
shopt -s globstar
modif_activ=rue;
=>
modif_activ=true
Dernière modification par iznobe (Le 28/12/2021, à 14:42)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#33 Le 28/12/2021, à 15:57
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
avec ce code :
# $i = nom complet rep ou fichier original
# $i1 = chemin relatif du repertoire original
# $j = nom complet rep ou fichier modifié
# $j1 = chemin relatif du repertoire modifié
# $j2 = nom dernier argument modifié
shopt -s globstar
modif_activ=rue;
###Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
Long=0; Nbrep=0; Nbfilemodified=0; Nbrepmodified=0; NbfileNOTmodified=0; Debut=$(echo $(date +%s));
echo "liste des fichiers n ' ayant pas pu etre modifiés :" > /tmp/nomodifs
echo "-------------------" > /tmp/modifs
for i in **/*; do
Nbrep=$(($Nbrep+1))
# traitement des espaces
j=$( echo $i | sed 's@ */ *@/@g' )
# remplacement d'un maxima de caractères interdits par windows ><\:"|?*
j=$( echo "$j" | tr '><"|?*:\\' '!!!!!!!%' ) # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
# Vérifions si le nom n'est pas interdit. Récupération du dernier argument
j2=$( echo "$j" | grep -o '[^/]*$' )
#if [[ "${Exclus[@]}" =~ "$j2" ]]; then j=$(echo "$j""_") ; echo "$j" ; fi
for t in "${Exclus[@]}"; do
if [[ "$t" = "$j2" ]]; then j="$j""_" ; fi
done
# Vérifions si la longueur n'est pas excessive
if [[ "${#j2}" -ge 248 || "${#j}" -ge 32384 ]] ; then
if [[ "$long" -eq 0 ]]; then echo "[url]https://www.pcastuces.com/pratique/astuces[/url]" > /tmp/LongFic ; fi
Long=$(($Long+1))
echo "$Long : $j" >> /tmp/LongFic
fi
if [[ "$i" != "$j" ]]; then # si il y a un changement a effectuer
#diff <(echo $i) <(echo $j)
if test -d "$i" ; then # si c' est un dossier
if test -e "$j" ; then # on verifie si il existe un dossier du meme nom avant de renommer
# si deja un dossier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un dossier du meme nom existe deja :'$j' impossible de renommer '$i'" >> /tmp/nomodifs
else # si pas de dossier du meme nom , on renomme
echo "on va renommer ce répertoire avec la commande suivante : mkdir '$j'"
if [ "$modif_activ" = true ] ; then
mkdir "$j"
if test -e "$j" ; then # si la creation du repertoire a reussi
# enregistrement des changements
echo "$Nbrep CREERREP : mkdir '$j'" >> /tmp/modifs
Nbrepmodified=$(($Nbrepmodified+1))
# on deplace tout le contenu de l' ancien repertoire dans le nouveau
# creer une fonction de la boucle et l' appeler ici a la place .
# for x in $i; do
# echo "mv $x $j" >> /tmp/modifs
# done
# echo "rmdir $i" >> /tmp/modifs
else
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour repertoire : '$i'" >> /tmp/nomodifs
fi
fi
fi
elif test -f "$i" ; then # si c est un fichier
# on verifie si il existe un fichier du meme nom avant de renommer
if test -e "$j" ; then # si deja un fichier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un fichier du meme nom existe deja :\'$j\' impossible de renommer \'$i\'" >> /tmp/nomodifs
else # si pas de fichier du meme nom , on renomme
# chemin relatif du repertoire original
i1=$(echo "$i" | rev | cut -d/ --complement -s -f1 | rev)
# Récupérons le chemin apres modif
j1=$(echo "$j" | rev | cut -d/ --complement -s -f1 | rev) # donne le chemin relatif du repertoire modifié .
if [[ "$i1" != "$j1" ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
# dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
j=$(echo "$j1/$j2")
else # sinon il suffit de ne pas tenir compte de l' arboresecence puisqu ' elle est identique
# recuperation nom original du dernier argument
i=$(echo "$i" | grep -o '[^/]*$' ) # on utilise juste le nom de fichier original pour la src
j=$(echo "$j" | grep -o '[^/]*$' ) # on utilise que le nom du fichier modifié pour la destination
fi
echo "on va renommer ce fichier avec la commande suivante : mv '$i' '$j'"
if [ "$modif_activ" = true ] ; then
mv "$i" "$j"
# puis on verifie que le fichier renommé existe bien :
if test -e "$j" ; then # si le fichier existe on incremente
# enregistrement des changements
echo "$Nbrep RENOM : mv '$i' en : '$j'" >> /tmp/modifs
Nbfilemodified=$(($Nbfilemodified+1))
else # sinon => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour fichier : '$i'" >> /tmp/nomodifs
fi
fi
fi
else # sinon => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour : '$i'" >> /tmp/nomodifs
fi
fi
done
echo ""
echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-$Debut)) secondes."
echo ""
echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'"
echo ""
if [[ "$Long" > 0 ]]; then echo "vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : for i in **/*; do find . -type d -empty -print -delete ; done"
ca a l ' air de maintenant fonctionné normalement .
certaines conditions etaient ecrites sous la forme
if $x
au lieu de
if "$x"
ce qui mettait le binzz
---------------------------------------------------------------------------------------------------------------------------
resultat d' une simulation avec le script ci-dessus sur mon repertoire personnel script :
iznobe@iznobe-PC:~/Scripts/teste$ cd .. && ./test.sh
on va renommer ce fichier avec la commande suivante : mv 'script conformité noms samba final.sh' 'script conformité noms samba final.sh'
on va renommer ce fichier avec la commande suivante : mv 'Nouveau [doc ument] ' 'Nouveau [doc ument]'
27645 répertoires et fichiers traités, 0 répertoires modifiés, 0 fichiers modifiés, 0 répertoires et fichiers n ' ayant pas pu etre modifiés en 302 secondes.
liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'
pour supprimer les dossiers vides , copiez collez la commande suivante : for i in **/*; do find . -type d -empty -print -delete ; done
iznobe@iznobe-PC:~/Scripts$
je vais lancer une simulation sur mon repertoire perso , ca risque de prendre un peu de temps ...
EDIT , en fait non , le script ne suit pas les liens symboliques !
Dernière modification par iznobe (Le 28/12/2021, à 16:35)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#34 Le 28/12/2021, à 17:57
- geole
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Tu avais signalé des problèmes pour les fichiers avec des [ et des ]
Le problème semble après, il veut encore renommer....
Idée 2, on ne fait jamais le test et on récupère les erreurs de l'exécution s'il y en a....
J'ai actualisé pour filtrer les erreurs d'exécution.
Je viens d'exécuter ton script. Les modifications sont bien faites
Dernière modification par geole (Le 28/12/2021, à 17:58)
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
#35 Le 28/12/2021, à 18:24
- geole
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Tu as toujours cette commande
echo "on va renommer ce répertoire avec la commande suivante : mkdir '$j'"
mkdir "$j"
echo "$Nbrep CREERREP : mkdir '$j'" >> /tmp/modifs
Ou alors, il faut plus de choses: exécuter la commande que tu as prévue
a@a:~/TEST$ for i in **/*; do find . -type d -empty -print -delete ; done
./[ REP ##### ]/[ REP ##### ] BBBB/[ REP ##### ] BBBB EEEE
./ [ REP ##### ] / [ REP ##### ] BBBB / [ REP ##### ] BBBB EEEE
./ [ REP ##### ] / [ REP ##### ] BBBB
./ [ REP ##### ]
a@a:~/TEST$
for i in **/*; do find . -type d -empty -print -delete ; done
Un résultat montre que l'ancien répertoire est toujours présent
0 -rw-rw-r-- 1 a a 0 déc. 28 17:12 '[ FIC DRA]'
4 -rwxrwxr-x 1 a a 2434 déc. 28 16:46 MonScript
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 ' [ REP ##### ] '
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 '[ REP ##### ]'
8 -rwxrwxr-x 1 a a 6905 déc. 28 16:50 script
a@a:~/TEST$
Avec tous ses anciens répertoires
a@a:~/TEST/ [ REP ##### ] $ ls -als
total 12
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 .
4 drwxrwxr-x 4 a a 4096 déc. 28 17:13 ..
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 ' [ REP ##### ] BBBB '
a@a:~/TEST/ [ REP ##### ] $ ls -Rals
.:
total 12
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 .
4 drwxrwxr-x 4 a a 4096 déc. 28 17:13 ..
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 ' [ REP ##### ] BBBB '
'./ [ REP ##### ] BBBB ':
total 12
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 .
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 ..
4 drwxrwxr-x 2 a a 4096 déc. 28 17:13 ' [ REP ##### ] BBBB EEEE'
'./ [ REP ##### ] BBBB / [ REP ##### ] BBBB EEEE':
total 8
4 drwxrwxr-x 2 a a 4096 déc. 28 17:13 .
4 drwxrwxr-x 3 a a 4096 déc. 28 17:13 ..
a@a:~/TEST/ [ REP ##### ] $
Dernière modification par geole (Le 28/12/2021, à 18:25)
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
#36 Le 29/12/2021, à 11:11
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour , je pense que je vais rester sur la version avec la commande pour enlever les dossiers vides manuellement , ca semble d ' une part plus sur et plus judicieux car pas le temps ni la connaissance de faire mieux avec ce script .
En l ' etat , il a quand meme bien evoluer et est relativement performant .
j ' ai bien conscience qu ' il est possible de faire bien mieux que ca , mais bon ...
je vais passer en reolu donc , et faire du nettoyage dans les messages .
j ' espere que ce script pourra servir aussi a d ' autres .
Bonnes fetes de fin d' année a tous et merci @geole pour ton aide precieuse ainsi que @watael et @MicP et @kamaris !
Dernière modification par iznobe (Le 29/12/2021, à 14:33)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#37 Le 29/12/2021, à 14:29
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour , finalement je remodifie une dernier fois le script final afin de supprimer la boucle for , pour les fichiers exclus , la solution etant donnée par
if [[ " ${Exclus[*]} " == *" $j "* ]]; then j+=_ ; fi
(j'ai aussi remplacé j2 par j, peut-être ne faut-il pas…)
que je remercie pour son intervention !
Pour activer les modifications , n' oubliez pas de mettre :
modif_activ=true
Voici donc le code final :
# $i = nom complet rep ou fichier original
# $i1 = chemin relatif du repertoire original
# $j = nom complet rep ou fichier modifié
# $j1 = chemin relatif du repertoire modifié
# $j2 = nom dernier argument modifié
shopt -s globstar
modif_activ= rue;
###Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
Long=0; Nbrep=0; Nbfilemodified=0; Nbrepmodified=0; NbfileNOTmodified=0; Debut=$(echo $(date +%s));
echo "liste des fichiers n ' ayant pas pu etre modifiés :" > /tmp/nomodifs
echo "-------------------" > /tmp/modifs
for i in **/*; do
Nbrep=$(($Nbrep+1))
# traitement des espaces
j=$( echo $i | sed 's@ */ *@/@g' )
# remplacement d'un maxima de caractères interdits par windows ><\:"|?*
j=$( echo "$j" | tr '><"|?*:\\' '!!!!!!!%' ) # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
# Vérifions si le nom n'est pas interdit. Récupération du dernier argument
j2=$( echo "$j" | grep -o '[^/]*$' )
if [[ " ${Exclus[*]} " == *" $j2 "* ]]; then j+=_ ; fi
# Vérifions si la longueur n'est pas excessive
if [[ "${#j2}" -ge 248 || "${#j}" -ge 32384 ]] ; then
if [[ "$long" -eq 0 ]]; then echo "[url]https://www.pcastuces.com/pratique/astuces[/url]" > /tmp/LongFic ; fi
Long=$(($Long+1))
echo "$Long : $j" >> /tmp/LongFic
fi
if [[ "$i" != "$j" ]]; then # si il y a un changement a effectuer
if test -d "$i" ; then # si c' est un dossier
if test -e "$j" ; then # on verifie si il existe un dossier du meme nom avant de renommer
# si deja un dossier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un dossier du meme nom existe deja :'$j' impossible de renommer '$i'" >> /tmp/nomodifs
else # si pas de dossier du meme nom , on renomme
echo "on va renommer le répertoire '$i' avec la commande suivante : mkdir '$j'"
if [ "$modif_activ" = true ] ; then
mkdir "$j"
if test -e "$j" ; then # si la creation du repertoire a reussi
# enregistrement des changements
echo "$Nbrep CREERREP : mkdir '$j'" >> /tmp/modifs
Nbrepmodified=$(($Nbrepmodified+1))
else
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour repertoire : '$i'" >> /tmp/nomodifs
fi
fi
fi
elif test -f "$i" ; then # si c est un fichier
# on verifie si il existe un fichier du meme nom avant de renommer
if test -e "$j" ; then # si deja un fichier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un fichier du meme nom existe deja :\'$j\' impossible de renommer \'$i\'" >> /tmp/nomodifs
else # si pas de fichier du meme nom , on renomme
# chemin relatif du repertoire original
#i1=$(echo "$i" | rev | cut -d/ --complement -s -f1 | rev)
# modification de la ligne ci-dessus suite a la remarque sur l' encodage : https://forum.ubuntu-fr.org/viewtopic.php?pid=22832253#p22832253
lgC=${#i}
chaiF=$(basename $i)
lgF=${#chaiF}
i1=${i:0:$((lgC - lgF))}
# Récupérons le chemin apres modif
j1=$(echo "$j" | rev | cut -d/ --complement -s -f1 | rev) # donne le chemin relatif du repertoire modifié .
if [[ "$i1" != "$j1" ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
# dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
j=$(echo "$j1/$j2")
fi
echo "on va renommer ce fichier avec la commande suivante : mv '$i' => '$j'"
if [ "$modif_activ" = true ] ; then
mv "$i" "$j"
# puis on verifie que le fichier renommé existe bien :
if test -e "$j" ; then # si le fichier existe on incremente
# enregistrement des changements
echo "$Nbrep RENOM : mv '$i' en : '$j'" >> /tmp/modifs
Nbfilemodified=$(($Nbfilemodified+1))
else # sinon => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour fichier : '$i'" >> /tmp/nomodifs
fi
fi
fi
else # sinon => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour : '$i'" >> /tmp/nomodifs
fi
fi
done
echo ""
echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-$Debut)) secondes."
echo ""
echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'"
echo ""
if [[ "$Long" > 0 ]]; then echo "vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find -type d -empty -delete"
EDIT : Merci donc aussi @Coeur noir et @nany pour la suppression de la boucle dans la suppresion des dossiers vides
Dernière modification par iznobe (Le 02/04/2025, à 17:38)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#38 Le 20/01/2022, à 22:42
- Coeur Noir
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Coeur Noir a écrit :Doit bien y avoir moyen de demander à Samba de n'accepter que des noms de fichiers/dossiers compatibles Win ?
Bonjour
Il faut monter le répertoire avec l'option windows_names
D'une part je supposais que c'était déjà fait.
Et d'autre part ça n'est valable que si le montage a lieu dans un système Linux. Dans ce cas c'est le pilote ntfs qui agit, pas Samba.
Iznobe c'est donc à vérifier, si le partage Samba est dans un système Linux, les options de son montage devraient inclure windows_names et pourquoi pas utf8 ou locale=fr_FR.UTF-8 ça devrait limiter la possibilité de produire des noms de fichiers incompatibles Windows.
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#39 Le 21/01/2022, à 00:59
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour @Coeur Noir ,
D'une part je supposais que c'était déjà fait.
Et d'autre part ça n'est valable que si le montage a lieu dans un système Linux
le montage du dossier partagé ? ou bien dans les options de conf de samba ?
Mon serveur samba est sur ubuntu , par contre le montage des dossiers qu il partage , se font sous windows , sous android ou sous ubuntu selon les besoins .
Si j ' ai bien compris , du coup ca limite l' interet de cette option ?
En l ' occurence , grace a l' entraide des gens sur ce forum , on a pu tout de meme creer ce script qui permet de resoudre le soucis une bonne fois pour toute et pour tout les OS ( a part MAC ) vu que windows est me semble t il le plus restrictif en caracteres interdit .
Depuis a partir d' ordi windows ou android , je n' ai pour l' instant plus trouver de nom qui cloche .
Ce script permet aussi d' enlever les espaces en debut et fin de noms de fichiers , il est relativement rapide meme si il est certainement encore possible de l' ameliorer .
D ' apres mes tests , il permet de logguer les changements et donc de reperer facilement les bugs , meme sans faire rellement les changements .
Je le trouve tres pratique et remercie tous ceux qui ont participés a son elaboration
Dernière modification par iznobe (Le 21/01/2022, à 01:01)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#40 Le 02/04/2025, à 19:46
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
petite modifications mineures apportées au script , qui peut maintenant être utilisé sur des encodages "8859 1" suite à la discussion suivante : https://forum.ubuntu-fr.org/viewtopic.php?id=2090629
Ajout la possibilité de designer un répertoire spécifique dans le script .
amélioration de la visibilité des changement pour la simulation .
# Description des variables :
# $i = nom complet rep ou fichier original
# $i1 = chemin relatif du repertoire original
# $j = nom complet rep ou fichier modifié
# $j1 = chemin relatif du repertoire modifié
# $j2 = nom dernier argument modifié
# variables a ajuster :
modif_activ= false;
EXECUTE_DIR="" # inclure le " slash " à la fin du chemin afin de designer un repertoire specifique , exemple : /data/ , sinon laisser tel quel .
#### FIN ####
shopt -s globstar
###Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
Long=0; Nbrep=0; Nbfilemodified=0; Nbrepmodified=0; NbfileNOTmodified=0; Debut=$(echo $(date +%s));
echo "liste des fichiers n ' ayant pas pu etre modifiés :" > /tmp/nomodifs
echo "-------------------" > /tmp/modifs
for i in $EXECUTE_DIR**/*; do
Nbrep=$(($Nbrep+1))
# traitement des espaces
j=$( echo $i | sed 's@ */ *@/@g' )
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?*
j=$( echo "$j" | tr '><"|?*:\\' '!!!!!!!%' ) # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
# Vérifions si le nom n'est pas interdit.
j2=$( echo "$j" | grep -o '[^/]*$' ) # Récupére le dernier argument
if [[ " ${Exclus[*]} " == *" $j2 "* ]]; then j+=_ ; fi
# Vérifions si la longueur n'est pas excessive
if [[ "${#j2}" -ge 248 || "${#j}" -ge 32384 ]] ; then
if [[ "$long" -eq 0 ]]; then echo "[url]https://www.pcastuces.com/pratique/astuces[/url]" > /tmp/LongFic ; fi
Long=$(($Long+1))
echo "$Long : $j" >> /tmp/LongFic
fi
if [[ "$i" != "$j" ]]; then # si il y a un changement a effectuer
if test -d "$i" ; then # si c' est un dossier
if test -e "$j" ; then # on verifie si il existe un dossier du meme nom avant de renommer
# si deja un dossier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un dossier du meme nom existe deja :'$j' impossible de renommer '$i'" >> /tmp/nomodifs
else # si pas de dossier du meme nom , on renomme
echo "on va renommer le répertoire avec la commande suivante : mkdir '$i' => '$j'"
if [ "$modif_activ" = true ] ; then
mkdir "$j"
if test -e "$j" ; then # si la creation du repertoire a reussi , on enregistre
echo "$Nbrep CREERREP : mkdir '$j'" >> /tmp/modifs
Nbrepmodified=$(($Nbrepmodified+1))
else
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour repertoire : '$i'" >> /tmp/nomodifs
fi
fi
fi
elif test -f "$i" ; then # si c est un fichier
# on verifie si il existe un fichier du meme nom avant de renommer
if test -e "$j" ; then # si deja un fichier du meme nom , on stocke l' erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep un fichier du meme nom existe deja :'$j' impossible de renommer '$i'" >> /tmp/nomodifs
else # si pas de fichier du meme nom , on renomme
i1=${i%/*} # chemin relatif du repertoire original
j1=${j%/*} # Récupére le chemin apres modif
if [[ "$i1" != "$j1" ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
j=$(echo "$j1/$j2") # dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
fi
echo "on va renommer ce fichier avec la commande suivante : mv '$i' => '$j2'"
if [ "$modif_activ" = true ] ; then
mv "$i" "$j"
if test -e "$j" ; then # puis on verifie que le fichier renommé existe bien , si le fichier existe on incremente et on enregistre
echo "$Nbrep RENOM : mv '$i' en : '$j'" >> /tmp/modifs
Nbfilemodified=$(($Nbfilemodified+1))
else # => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour fichier : '$i'" >> /tmp/nomodifs
fi
fi
fi
else # => erreur
NbfileNOTmodified=$(($NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour : '$i'" >> /tmp/nomodifs
fi
fi
done
echo ""
echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-$Debut)) secondes."
echo ""
echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'"
echo ""
if [[ "$Long" > 0 ]]; then echo "vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find -type d -empty -delete"
Dernière modification par iznobe (Le 02/04/2025, à 19:53)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#41 Le 02/04/2025, à 21:39
- Watael
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
tu devrais d'abord nommer correctement les variables ( i => nomComplet ; i1 => chemRel...)
EXECUTE_DIR => execDir ; sans slash final (ça améliore la lecture de for var in execDir/**/*)
attention! modifActiV=false sans espace.
ça ne produit pas d'erreur, mais la variable ne vaut pour autant pas "false"
declare -i nb
nb+=1
echo $nb
1 #2, 3, etc...
àmha, il y a trop de fichiers de log. un seul ferait l'affaire, pourvu que soit indiqué en début de ligne le motif de l'erreur.
...
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#42 Le 03/04/2025, à 08:50
- BrunoL
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour,
Je partages la remarque de Watael car je l'ai mise en oeuvre dans la version que j'ai adaptée. Prudence toutefois, comme dit par ailleurs, par définition les lignes "éditées" inclue des caractères problématiques et donc le log produit doit être exploité par "cat" et non via un éditeur de texte au risque de s'ajouter des frayeurs
@iznobe alors là non tu affaiblis de façon catastrophique ton script !
Sauf erreur, il y manque dans le log la moitié des modifications qui seront apportées
Je te suggère d'ajouter ligne 101 (+ ou - 2) entre les 4ème et 5ème fi en partant du bas de la boucle for :
else
echo "on va renommer ce fichier avec la commande suivante : mv '$i' => '$j'"
et là en tant qu'utilisateur je serai ravi
Bonne journée
Dernière modification par BrunoL (Le 03/04/2025, à 08:57)
Hors ligne
#43 Le 03/04/2025, à 09:12
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Salut BrunoL , je n' ai rien touché aux logs . juste enlever quelques commentaires , qui détaillait un peu trop des choses évidentes .
Pour les fichiers , ok , je remet , le chemin complet , plutot que le nom seul du fichier .
et je vais appliquer certaines modifs données par @Watael surtout pour des noms de variables " parlant " .
Le script de départ étant celui de @geole , j 'avais repris " en l ' état " .
sans slash final (ça améliore la lecture de for var in execDir/**/*)
si je fais cela , ca ne marchera pas en lancant le script depuis le repertoire courant , mais ça lancera le script sur " / " du systeme de fichiers quand la variable en sera pas renseignée .
un contournement serait alors de tester si la variable est vide ( ou pas ) et donc de la transformer en y ajoutant le slash de fin ?
Dernière modification par iznobe (Le 03/04/2025, à 09:14)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#44 Le 03/04/2025, à 10:26
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
voici le script remodifié :
#!/bin/bash
# Description des variables :
# $nomOriginal = nom complet rep ou fichier original
# $pathOriginal = chemin du repertoire original
# $nomModif = nom complet rep ou fichier modifié
# $pathModif = chemin du repertoire modifié
# $nomArgModif = nom dernier argument modifié
# variables a ajuster :
modif_activ=false;
execDir="" # inclure le " slash " à la fin du chemin afin de designer un repertoire specifique , exemple : /data/ , sinon laisser tel quel .
#### FIN ####
shopt -s globstar
### Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
Long=0; Nbrep=0; Nbfilemodified=0; Nbrepmodified=0; NbfileNOTmodified=0; Debut=$(echo $(date +%s));
echo "liste des fichiers n ' ayant pas pu etre modifiés :" > /tmp/nomodifs
echo "-------------------" > /tmp/modifs
for nomOriginal in "$execDir"**/*; do
Nbrep=$((Nbrep+1))
# traitement des espaces
nomModif=$( echo "$nomOriginal" | sed 's@ */ *@/@g' )
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?*
nomModif=$( echo "$nomModif" | tr '><"|?*:\\' '!!!!!!!%' ) # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
# Vérifions si le nom n'est pas interdit.
nomArgModif=$( echo "$nomModif" | grep -o '[^/]*$' ) # Récupére le dernier argument
if [[ " ${Exclus[*]} " == *" $nomArgModif "* ]]; then nomModif+=_ ; fi
# Vérifions si la longueur n'est pas excessive
if [[ "${#nomArgModif}" -ge 248 || "${#nomModif}" -ge 32384 ]] ; then
if [[ "$Long" -eq 0 ]]; then echo "[url]https://www.pcastuces.com/pratique/astuces[/url]" > /tmp/LongFic ; fi
Long=$((Long+1))
echo "$Long : $nomModif" >> /tmp/LongFic
fi
if [[ "$nomOriginal" != "$nomModif" ]]; then # si il y a un changement a effectuer
if test -d "$nomOriginal" ; then # si c' est un dossier
if test -e "$nomModif" ; then # on verifie si il existe un dossier du meme nom avant de renommer
# si deja un dossier du meme nom , on stocke l' erreur
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep un dossier du meme nom existe deja :'$nomModif' impossible de renommer '$nomOriginal'" >> /tmp/nomodifs
else # si pas de dossier du meme nom , on renomme
echo "on va renommer le répertoire avec la commande suivante : mkdir '$nomOriginal' => '$nomModif'"
if [ "$modif_activ" = true ] ; then
mkdir "$nomModif"
if test -e "$nomModif" ; then # si la creation du repertoire a reussi , on enregistre
echo "$Nbrep CREERREP : mkdir '$nomModif'" >> /tmp/modifs
Nbrepmodified=$((Nbrepmodified+1))
else
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour repertoire : '$nomOriginal'" >> /tmp/nomodifs
fi
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
# on verifie si il existe un fichier du meme nom avant de renommer
if test -e "$nomModif" ; then # si deja un fichier du meme nom , on stocke l' erreur
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep un fichier du meme nom existe deja :'$nomModif' impossible de renommer '$nomOriginal'" >> /tmp/nomodifs
else # si pas de fichier du meme nom , on renomme
pathOriginal=${nomOriginal%/*} # chemin du repertoire original
pathModif=${nomModif%/*} # chemin apres modif
if [[ "$pathOriginal" != "$pathModif" ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
nomModif="$pathModif"/"$nomArgModif" # dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
fi
echo "on va renommer ce fichier avec la commande suivante : mv '$nomOriginal' => '$nomModif'"
if [ "$modif_activ" = true ] ; then
mv "$nomOriginal" "$nomModif"
if test -e "$nomModif" ; then # puis on verifie que le fichier renommé existe bien , si le fichier existe on incremente et on enregistre
echo "$Nbrep RENOM : mv '$nomOriginal' en : '$nomModif'" >> /tmp/modifs
Nbfilemodified=$((Nbfilemodified+1))
else # => erreur
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour fichier : '$nomOriginal'" >> /tmp/nomodifs
fi
fi
fi
else # => erreur
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour : '$nomOriginal'" >> /tmp/nomodifs
fi
fi
done
echo ""
echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-Debut)) secondes."
echo ""
echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'"
echo ""
if test "$Long" gt 0; then echo "vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find -type d -empty -delete"
par contre dans shellcheck , j ' obtiens :
Line 27:
nomModif=$( echo "$nomOriginal" | sed 's@ */ *@/@g' )
^-- SC2001 (style): See if you can use ${variable//search/replace} instead.
une idée @watael ?
Dernière modification par iznobe (Le 03/04/2025, à 10:34)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#45 Le 03/04/2025, à 11:00
- Watael
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
j'ai cherché rapidement avec extglob, mais n'ai pas encore trouvé.
for nomOriginal in "${execDir:=$PWD}/"**/*; do
si execDir n'est pas définie, ce Remplacement de paramètres utilisera et lui assignera le nom du répertoire courant. Ça te va ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#46 Le 03/04/2025, à 11:37
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
j'ai cherché rapidement avec extglob, mais n'ai pas encore trouvé.
for nomOriginal in "${execDir:=$PWD}/"**/*; do
si execDir n'est pas définie, ce Remplacement de paramètres utilisera et lui assignera le nom du répertoire courant. Ça te va ?
perso tout me va tant que ça fonctionne . Merci
modif indiquée par @watael + correction de quelques petits bugs , simplification des logs :
#!/bin/bash
# Description des variables :
# $nomOriginal = nom complet rep ou fichier original
# $pathOriginal = chemin du repertoire original
# $nomModif = nom complet rep ou fichier modifié
# $pathModif = chemin du repertoire modifié
# $nomArgModif = nom dernier argument modifié
# variables a ajuster :
modif_activ=false; # mettre : true pour appliquer les modifications
execDir="" # Pour appliquer dans un dossier specifique , mettre le chemin absolu du dossier ici .
#### FIN ####
shopt -s globstar
### Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
Long=0; Nbrep=0; Nbfilemodified=0; Nbrepmodified=0; NbfileNOTmodified=0; Debut=$(date +%s);
echo "liste des fichiers n ' ayant pas pu etre modifiés :" > /tmp/error.log
echo "-------------------" > /tmp/modifs
for nomOriginal in "${execDir:=$PWD}/"**/*; do
Nbrep=$((Nbrep+1))
nomModif=$( echo "$nomOriginal" | sed 's@ */ *@/@g' ) # traitement des espaces
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?* par " _ " .
nomModif=$( echo "$nomModif" | tr '><"|?*:\\ ' '_________%' ) # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
nomArgModif=$( echo "$nomModif" | grep -o '[^/]*$' ) # Récupére le dernier argument
if [[ " ${Exclus[*]} " == *" $nomArgModif "* ]]; then nomModif+=_ ; fi # Vérifions si le nom n'est pas interdit.
if [[ "${#nomArgModif}" -ge 248 || "${#nomModif}" -ge 32384 ]] ; then # Vérifions si la longueur n'est pas excessive
Long=$((Long+1))
echo "$Long : $nomModif" >> /tmp/error.log
fi
if [[ "$nomOriginal" != "$nomModif" ]]; then # si il y a un changement a effectuer
if test -d "$nomOriginal" ; then # si c' est un dossier
if test -e "$nomModif" ; then # on verifie si il existe un dossier du meme nom avant de renommer
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep un dossier du meme nom existe deja :'$nomModif' impossible de renommer '$nomOriginal'" >> /tmp/error.log
else # si pas de dossier du meme nom , on renomme
echo "on va renommer le répertoire avec la commande suivante : mkdir '$nomOriginal' => '$nomModif'"
if [ "$modif_activ" = true ] ; then
mkdir "$nomModif"
if test -e "$nomModif" ; then # si la creation du repertoire a reussi , on enregistre
echo "$Nbrep CREERREP : mkdir '$nomModif'" >> /tmp/modifs
Nbrepmodified=$((Nbrepmodified+1))
else
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour repertoire : '$nomOriginal'" >> /tmp/error.log
fi
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
# on verifie si il existe un fichier du meme nom avant de renommer
if test -e "$nomModif" ; then
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep un fichier du meme nom existe deja :'$nomModif' impossible de renommer '$nomOriginal'" >> /tmp/error.log
else # si pas de fichier du meme nom , on renomme
pathOriginal=${nomOriginal%/*} # chemin du repertoire original
pathModif=${nomModif%/*} # chemin apres modif
if [[ "$pathOriginal" != "$pathModif" ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
nomModif="$pathModif"/"$nomArgModif" # dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
fi
echo "on va renommer ce fichier avec la commande suivante : mv '$nomOriginal' => '$nomModif'"
if [ "$modif_activ" = true ] ; then
mv "$nomOriginal" "$nomModif"
if test -e "$nomModif" ; then # on verifie que le fichier renommé existe bien , si le fichier existe on incremente et on enregistre
echo "$Nbrep RENOM : mv '$nomOriginal' en : '$nomModif'" >> /tmp/modifs
Nbfilemodified=$((Nbfilemodified+1))
else
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour fichier : '$nomOriginal'" >> /tmp/error.log
fi
fi
fi
else
NbfileNOTmodified=$((NbfileNOTmodified+1))
echo "$Nbrep erreur inconnue pour : '$nomOriginal'" >> /tmp/error.log
fi
fi
done
echo ""
echo "$Nbrep répertoires et fichiers traités, $Nbrepmodified répertoires modifiés, $Nbfilemodified fichiers modifiés, $NbfileNOTmodified répertoires et fichiers n ' ayant pas pu etre modifiés en $(($(date +%s)-Debut)) secondes."
echo ""
echo "liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/error.log'"
echo ""
if [[ "$Long" -ne 0 ]]; then echo "vous avez '$Long' répertoires de taille importante. Voir le détail dans /tmp/error.log" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find -type d -empty -delete"
Dernière modification par iznobe (Le 03/04/2025, à 11:47)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#47 Le 03/04/2025, à 21:11
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Allez hop , une dernière " mouture " pour faire plaisir @watael avec harmonisation et et touti cuenti ( logs compteurs nom des variables etc .. ):D :
#!/bin/bash
# Description des variables :
# $nomOriginal = nom complet rep ou fichier original
# $pathOriginal = chemin du repertoire original
# $nomModif = nom complet rep ou fichier modifié
# $pathModif = chemin du repertoire modifié
# $nomArgModif = nom dernier argument modifié
# variables a ajuster :
modif_activ=false; # mettre : true pour appliquer les modifications
execDir="/datas/iznobe/Documents/eva/documents importants eva" # Pour appliquer dans un dossier specifique , mettre le chemin absolu du dossier ici .
#### FIN ####
shopt -s globstar
### Liste des fichiers exclus
Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
LongPath=0; NbScan=0; NbRep=0; NbFile=0; NbRepModified=0; NbFileModified=0; NbRepNOTModified=0; NbFileNOTModified=0; Debut=$(date +%s);
echo "liste des erreur ( fichiers ou dossiers ) n ' ayant pas pu etre modifiés :" > /tmp/error.log
echo "-------------------" > /tmp/modifs
for nomOriginal in "${execDir:=$PWD}/"**/*; do
((NbScan++))
nomModif=$( echo "$nomOriginal" | sed 's@ */ *@/@g' ) # traitement des espaces
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?* par " _ " + les espaces dans les noms .
nomModif=$( echo "$nomModif" | tr '><"|?*:\\ ' '_________%' ) # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
nomArgModif=$( echo "$nomModif" | grep -o '[^/]*$' ) # Récupére le dernier argument
if [[ " ${Exclus[*]} " == *" $nomArgModif "* ]]; then nomModif+=_ ; fi # Vérifions si le nom n'est pas interdit.
if [[ "${#nomArgModif}" -ge 248 || "${#nomModif}" -ge 32384 ]] ; then # Vérifions si la longueur n'est pas excessive
LongPath=$((LongPath+1))
echo "chemin de fichier / dossier trop long ! $LongPath : $nomModif" >> /tmp/error.log
fi
if [[ "$nomOriginal" != "$nomModif" ]]; then # si il y a un changement a effectuer
if test -d "$nomOriginal" ; then # si c' est un dossier
((NbRep++))
if test -e "$nomModif" ; then # on verifie si il existe un dossier du meme nom avant de renommer
NbRepNOTModified=$((NbRepNOTModified+1))
echo "$NbRep un dossier du meme nom existe deja : $nomModif impossible de renommer $nomOriginal" >> /tmp/error.log
else # si pas de dossier du meme nom , on renomme
if [ "$modif_activ" = true ] ; then
mkdir -p "$nomModif"
echo "on va renommer le répertoire avec la commande suivante : mkdir $nomOriginal => $nomModif"
if test -e "$nomModif" ; then # si la creation du repertoire a reussi , on enregistre
echo "$NbScan CREER_REP : mkdir $nomModif" >> /tmp/modifs
NbRepModified=$((NbRepModified+1))
else
NbRepNOTModified=$((NbRepNOTModified+1))
echo "$NbScan erreur inconnue pour repertoire : $nomOriginal" >> /tmp/error.log
fi
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
((NbFile++))
if test -e "$nomModif" ; then # on verifie si il existe un fichier du meme nom avant de renommer
NbFileNOTModified=$((NbFileNOTModified+1))
echo "$NbScan un fichier du meme nom existe deja : $nomModif impossible de renommer $nomOriginal" >> /tmp/error.log
else # si pas de fichier du meme nom , on renomme
pathOriginal=${nomOriginal%/*} # chemin du repertoire original
pathModif=${nomModif%/*} # chemin apres modif
if [[ "$pathOriginal" != "$pathModif" ]]; then # si les chemins sont differents , c' est que l' arborescence a été modifiée :
nomModif="$pathModif"/"$nomArgModif" # dans ce cas on utilise l' arborescence modifiée precedemment + le nom modifié du dernier argument pour la destination
fi
echo "on va renommer ce fichier avec la commande suivante : mv $nomOriginal => $nomModif"
if [ "$modif_activ" = true ] ; then
mv "$nomOriginal" "$nomModif"
if test -e "$nomModif" ; then # on verifie que le fichier renommé existe bien , si le fichier existe on incremente et on enregistre
echo "$NbScan RENOM : mv $nomOriginal en : $nomModif" >> /tmp/modifs
NbFileModified=$((NbFileModified+1))
else
NbFileNOTModified=$((NbFileNOTModified+1))
echo "$NbScan erreur inconnue pour fichier : $nomOriginal" >> /tmp/error.log
fi
fi
fi
else
NbFileNOTModified=$((NbFileNOTModified+1))
echo "$NbScan erreur inconnue pour : $nomOriginal" >> /tmp/error.log
fi
fi
done
echo ""
echo "$NbScan répertoires et fichiers traités, $NbRepModified répertoires modifiés, $NbFileModified fichiers modifiés"
echo "$NbFileNOTModified fichiers , $NbRepNOTModified répertoires n ' ayant pas pu etre modifiés , le tout en $(($(date +%s)-Debut)) secondes."
echo ""
echo "liste des fichiers modifiés dans '/tmp/modifs'"
echo "liste des erreurs dans '/tmp/error.log'"
echo ""
if [[ "$LongPath" -ne 0 ]]; then echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log" ; fi
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"
il reste cependant un problème a régler
par exemple , l' arborescence suivante :
~/Documents/te st/ te st2/te st3/test.txt
~/Documents/te st/ te st2/te st3/te st.txt
Avec bien sur comme execDir : "/home/iznobe/Documents/te st/ te st2"
j ' obtiens :
iznobe@iznobe-pc:/datas/iznobe/Scripts$ bash samba_rename_distinctif_final.sh
1 répertoires et fichiers traités, 0 répertoires modifiés, 0 fichiers modifiés
1 fichiers , 0 répertoires n ' ayant pas pu etre modifiés , le tout en 0 secondes.
liste des fichiers modifiés dans '/tmp/modifs'
liste des erreurs dans '/tmp/error.log'
pour supprimer les dossiers vides , copiez collez la commande suivante : find '/home/iznobe/Documents/te st/ te st2' -type d -empty -delete
iznobe@iznobe-pc:/datas/iznobe/Scripts$ cat /tmp/error.log
liste des erreur ( fichiers ou dossiers ) n ' ayant pas pu etre modifiés :
1 erreur inconnue pour : /home/iznobe/Documents/te st/ te st2/**/*
iznobe@iznobe-pc:/datas/iznobe/Scripts$
Mais je ne comprends pas pourquoi , j ' ai fait plein de test avec des espaces dans le chemin , ca marche impec
Dernière modification par iznobe (Le 03/04/2025, à 21:50)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#48 Le 03/04/2025, à 21:32
- Watael
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
tu le sens pas les variables typées entier/integer ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#49 Le 03/04/2025, à 21:47
- iznobe
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
c' est à dire ?
Pour faire quoi avec ?
j ' ai fini d' éditer mon message précédent .
Dernière modification par iznobe (Le 03/04/2025, à 21:51)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#50 Le 03/04/2025, à 21:59
- Watael
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
declare -i nb nb+=1 echo $nb 1 nb+=1 echo $nb 2
3, 4...
plus d'évaluations arithmétiques un peu lourdingue.
Dernière modification par Watael (Le 03/04/2025, à 22:01)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne