#76 Le 15/04/2026, à 22:19
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
ext = /home/watael/BLA bla
c' est ce que j' obtiens peu importe la façon que je m' y prends , tant que je ne fais pas une regex pour verifier si le filename contient bien un point ou pas.
je ne vais pas tester si des espaces sont en fin de filename ( sans extension ) , puisque ça fait déjà le taf .
dans le cas où il n ' y a pas de point dans le filename , je " continue " au sein de la boucle non ?
mais , ce que je veut dire c ' est que si il n ' y a pas d' extension , obligatoirement , il faut que :
if test -z $ext ; then continueet que si
ext = BLA blaba forcément ça ne le fera pas.
Enfin , c ' est peut etre moi qui me plante sur la façon de voir la chose et qu il y a une meilleure approche .
En tout cas , sans tester l ' existence d ' un point , je ne vois pas comment mettre :
ext=""
if test -z $ext ; then continue
else
traiter les espaces en fin de nom sans extensions
...
rabouter l ' extension après traitement au nom de fichier sans extension pour retrouver le nom de fichier completDernière modification par iznobe (Le 15/04/2026, à 22:27)
Hors ligne
#77 Le 15/04/2026, à 22:31
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
comme je l'ai montré dans mon message précédent (#75), si ext == nom, alors on supprime ext
enfin, si ext existe, alors on lui ajoute un point au début.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#78 Le 15/04/2026, à 22:32
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
c' est ce que je pensais , avant de faire une regex , mais bon c ' est pas trop folichon ça .
Si j' ai un fichier bash.bash , un list.list , un sources.sources , un conf.conf ??
Dernière modification par iznobe (Le 15/04/2026, à 22:33)
Hors ligne
#79 Le 15/04/2026, à 22:39
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
l'extension ne sera pas égal à /chemin/nomSansExtension
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#80 Le 15/04/2026, à 22:58
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
for nomOriginal in "${execDir:=$PWD}/"**/*; do
NbScan+=1
if test -f "$nomOriginal"; then
ext=${nomOriginal##*.} # get extension without filename
if test "$nomOriginal" = "$ext"; then
continue
else
echo "traitement des espaces"
fi
fi
...ça le fait .
je sais pas trop où j ' étais parti là ! ![]()
Dernière modification par iznobe (Le 15/04/2026, à 22:58)
Hors ligne
#81 Le 15/04/2026, à 23:08
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
bon pour ce soir , je m' arrête là :
for nomOriginal in "${execDir:=$PWD}/"**/*; do
NbScan+=1
if test -f "$nomOriginal"; then
ext=${nomOriginal##*.} # get extension without filename
if test "$nomOriginal" != "$ext"; then
baseName=${nomOriginal%%.*} # get filename without extension
baseName=$(echo $baseName | sed 's@ */ *@/@g') # traitement des espaces
nomModif=$baseName+$ext
fi
fi
nomModif=$(echo $nomOriginal | sed 's@ */ *@/@g') # traitement des espaces en debut et fin du nom et les espaces consécutifs au milieu du nom sont ramenés a un seul espace
...
Mais ça ne fonctionne pas comme attendu :
mer. avril 15 23:09:11 iznobe@iznobe-pc:~/Scripts/test$ bash ~/Scripts/rename.sh
renommage du fichier : mv '/home/iznobe/Scripts/test/><"|?*\ :' ==> '/home/iznobe/Scripts/test/_______ %'
renommage du fichier : mv '/home/iznobe/Scripts/test/ bash.sh ' ==> '/home/iznobe/Scripts/test/bash.sh'
renommage du fichier : mv '/home/iznobe/Scripts/test/COM6' ==> '/home/iznobe/Scripts/test/COM6_'
renommage du fichier : mv '/home/iznobe/Scripts/test/ test : .ino ' ==> '/home/iznobe/Scripts/test/test % .ino'je devrais obtenir :
==> '/home/iznobe/Scripts/test/test %.ino'Dernière modification par iznobe (Le 16/04/2026, à 00:04)
Hors ligne
#82 Le 16/04/2026, à 00:04
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bon , finalement :
#!/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 , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
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)
declare -i 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+=1
# permet de supprimer les espaces avant l' extension de fichier
if test -f "$nomOriginal"; then
ext=${nomOriginal##*.} # get extension without filename
#baseName=${nomOriginal%%.*} # get filename without extension
#echo "nomOriginal= '$nomOriginal' , EXT= '$ext' , baseName= '$baseName'"
if test "$nomOriginal" != "$ext"; then
baseName=${nomOriginal%%.*} # get filename without extension
baseName=$(echo $baseName | sed 's@ */ *@/@g') # traitement des espaces
baseName=$baseName.$ext
else
baseName=$nomOriginal
fi
fi
nomModif=$(echo $baseName | sed 's@ */ *@/@g') # traitement des espaces en debut et fin du nom et les espaces consécutifs au milieu du nom sont ramenés a un seul espace
#echo " nomModif apres traitement des espaces : '$nomModif'"
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?* par " _ " + les espaces ( uniques et restant ) dans les noms .
if [ $all_spaces = true ]; then
nomModif=$(echo "$nomModif" | tr '><"|?*\\ :' '________%') # version all spaces .
else
nomModif=$(echo "$nomModif" | tr '><"|?*\\:' '_______%') # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
fi
#echo " nomModif apres traitement des caracteres spéciaux : '$nomModif'"
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}" >= 248 || "${#nomModif}" >= 32384 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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+=1
if test -e "$nomModif" ; then # on verifie si il existe un dossier du meme nom avant de renommer
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+=1
else
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+=1
if test -e "$nomModif" ; then # on verifie si il existe un fichier du meme nom avant de renommer
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 "renommage du fichier : 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+=1
else
NbFileNOTModified+=1
echo "$NbScan erreur inconnue pour fichier : $nomOriginal" >> /tmp/error.log
fi
fi
fi
else
NbFileModified+=1
echo "$NbScan erreur inconnue pour : $nomOriginal" >> /tmp/error.log
fi
fi
done
echo ""
echo "$NbRep dossiers et $NbFile 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 dossiers et fichiers modifiés dans '/tmp/modifs'"
echo "liste des erreurs dans '/tmp/error.log'"
echo ""
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"Mais ça ne fonctionne toujours pas au poil pour les extensions ![]()
En particulier lorsqu ' il y a plusieurs points dans le nom du fichier !
Dernière modification par iznobe (Le 16/04/2026, à 09:12)
Hors ligne
#83 Le 16/04/2026, à 03:03
- MicP
Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour
Mes petits bricolages, au cas où ![]()
mic@deb13x:~$ nomExt='bla bla bloblo aucune extension'
mic@deb13x:~$
mic@deb13x:~$ nom="${nomExt%.*}"
mic@deb13x:~$ [ "$nom" != "$nomExt" ] && ext="${nomExt##*.}" || echo "Pas de nom d'extension"
Pas de nom d'extension
mic@deb13x:~$
mic@deb13x:~$ echo "'$nom'" "'$ext'"
'bla bla bloblo aucune extension' ''
mic@deb13x:~$ mic@deb13x:~$
mic@deb13x:~$ nomExt='bla .bla bloblo .avec une .extension'
mic@deb13x:~$
mic@deb13x:~$ nom="${nomExt%.*}"
mic@deb13x:~$ [ "$nom" != "$nomExt" ] && ext="${nomExt##*.}" || echo "Pas de nom d'extension"
mic@deb13x:~$
mic@deb13x:~$ echo "'$nom'" "'$ext'"
'bla .bla bloblo .avec une ' 'extension'
mic@deb13x:~$ Hors ligne
#84 Le 16/04/2026, à 10:05
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Bonjour @MicP et merci , en fait , grace a toi , je me suis rendu compte que le découpage était mal réalisé dans mon script ...
au lieu de :
baseName="${nomOriginal%%.*}" # get filename without extensionil faut mettre :
baseName="${nomOriginal%.*}" # get filename without extensionun bug de moins .
Par contre , il me reste encore un truc qui ne va pas dans le " tr " encore
:
iznobe@m-pi3:~/test $ bash ~/rename.sh
renommage du fichier : mv '/home/iznobe/test/><"|?* \\ :' ==> '/home/iznobe/test/______ __ % __ %'
renommage du fichier : mv '/home/iznobe/test/ test: fichier de test % ? ' ==> '/home/iznobe/test/test% fichier de test % _'
renommage du fichier : mv '/home/iznobe/test/ test : .ino ' ==> '/home/iznobe/test/test %.ino'Pour le fichier nommé '><"|?* \\ :' , je comprends pas pourquoi j ' obtiens :
mv '/home/iznobe/test/><"|?* \\ :' ==> '/home/iznobe/test/______ __ % __ %'Hors ligne
#85 Le 16/04/2026, à 10:56
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Finalement , après moult tests , le problème n ' est pas la commande tr , le problème vient de :
baseName="$(echo $baseName | sed 's@ */ *@/@g')" # traitement des espacesen combinaison avec le caractère " * " dans le nom d' un fichier ...
iznobe@m-pi3:~/test $ bash ~/rename.sh
renommage du fichier : mv '/home/iznobe/test/*' ==> '/home/iznobe/test/_/home/iznobe/test/______ __ %/home/iznobe/test/_______ %/home/iznobe/test/COM6/home/iznobe/test/@pour , ù_ @/home/iznobe/test/@pour , ù_ @ _/home/iznobe/test/@pour , ù_ @ _ __/home/iznobe/test/@pour , ù_ @ __/home/iznobe/test/@pour , ù_ @ _ __ jk/home/iznobe/test/test%/home/iznobe/test/test% fichier de test % _/home/iznobe/test/test % .ino '
renommage du fichier : mv '/home/iznobe/test/><"|?* \\ :' ==> '/home/iznobe/test/______ __ %/home/iznobe/test/_______ % __ %'
renommage du fichier : mv '/home/iznobe/test/><"|?*\ :' ==> '/home/iznobe/test/_______ %'
renommage du fichier : mv '/home/iznobe/test/COM6' ==> '/home/iznobe/test/COM6_'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ ' ==> '/home/iznobe/test/@pour , ù_ @'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ *' ==> '/home/iznobe/test/@pour , ù_ @ _ ______ __ % _______ % COM6 @pour , ù_ @ @pour , ù_ @ _ @pour , ù_ @ _ __ @pour , ù_ @ __ @pour , ù_ @ _ __ jk test% test% fichier de test % _ test % .ino '
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ * \\' ==> '/home/iznobe/test/@pour , ù_ @ _ ______ __ % _______ % COM6 @pour , ù_ @ @pour , ù_ @ _ @pour , ù_ @ _ __ @pour , ù_ @ __ @pour , ù_ @ _ __ jk test% test% fichier de test % _ test % .ino __'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ \\ ' ==> '/home/iznobe/test/@pour , ù_ @ __'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ * \\ jk ' ==> '/home/iznobe/test/@pour , ù_ @ _ ______ __ % _______ % COM6 @pour , ù_ @ @pour , ù_ @ _ @pour , ù_ @ _ __ @pour , ù_ @ __ @pour , ù_ @ _ __ jk test% test% fichier de test % _ test % .ino __ jk'
renommage du fichier : mv '/home/iznobe/test/ test: fichier de test % ? ' ==> '/home/iznobe/test/test% fichier de test % _'
renommage du fichier : mv '/home/iznobe/test/ test : .ino ' ==> '/home/iznobe/test/test %.ino'
0 dossiers et 11 fichiers traités, 0 répertoires modifiés, 0 fichiers modifiés
0 fichiers , 0 répertoires n ' ayant pas pu etre modifiés , le tout en 0 secondes.
liste des dossiers et 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/test' -type d -empty -delete
iznobe@m-pi3:~/test $Dernière modification par iznobe (Le 16/04/2026, à 11:09)
Hors ligne
#86 Le 16/04/2026, à 13:36
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Allez , cette fois c ' est la bonne ( j ' espere
) :
#!/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é
# baseName = chemin du fichier sans .ext
# $ext = extension du fichier le cas échéant sinon , renvoie le chemin complet du fichier.
# variables a ajuster :
modif_activ=false # mettre : true pour appliquer les modifications , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
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)
declare -i LongPath=0 NbRepScanned=0 NbFileScanned=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+=1
# permet de supprimer les espaces avant l' extension de fichier :
if test -f "$nomOriginal"; then
NbFileScanned+=1
ext="${nomOriginal##*.}" # get extension without filename
#baseName=${nomOriginal%%.*} # get filename without extension
#echo "nomOriginal= '$nomOriginal' , EXT= '$ext' , baseName= '$baseName'"
if test "$nomOriginal" != "$ext"; then
baseName="${nomOriginal%.*}" # get filename without extension
baseName="$(echo $baseName | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}')" # traitement des espaces
baseName="$baseName.$ext"
fi
else
NbRepScanned+=1
baseName="$nomOriginal"
fi
nomModif="$(echo $baseName | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}')" # traitement des espaces en debut et fin du nom et les espaces consécutifs au milieu du nom sont ramenés a un seul espace
#echo " nomModif apres traitement des espaces : '$nomModif'"
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?* par " _ " + les espaces ( uniques et restant ) dans les noms .
if [ "$all_spaces" = true ]; then
nomModif="$(echo "$nomModif" | tr '><"|?*\\ :' '________%')" # version all spaces .
else
nomModif="$(echo "$nomModif" | tr '><"|?*\\:' '_______%')" # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
fi
#echo " nomModif apres traitement des caracteres spéciaux : '$nomModif'"
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}" >= 248 || "${#nomModif}" >= 32384 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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
if test -e "$nomModif" ; then # on verifie si il existe un dossier du meme nom avant de renommer
NbRepNOTModified+=1
echo "$NbRepScanned 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+=1
else
NbRepNOTModified+=1
echo "$NbScan erreur inconnue pour le dossier : $nomOriginal" >> /tmp/error.log
fi
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
if test -e "$nomModif" ; then # on verifie si il existe un fichier du meme nom avant de renommer
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 "renommage du fichier : 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+=1
else
NbFileNOTModified+=1
echo "$NbScan erreur inconnue pour fichier : $nomOriginal" >> /tmp/error.log
fi
fi
fi
else
echo "$NbScan erreur inconnue pour : $nomOriginal" >> /tmp/error.log
fi
fi
done
echo ""
echo "$NbRepScanned dossiers et $NbFileScanned 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 dossiers et fichiers modifiés dans '/tmp/modifs'"
echo "liste des erreurs dans '/tmp/error.log'"
echo ""
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"
echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"ce qui donne :
jeu. avril 16 13:36:41 iznobe@iznobe-pc:~/Scripts/test$ bash ~/Scripts/rename.sh
renommage du fichier : mv '/home/iznobe/Scripts/test/><"|?*\ :' ==> '/home/iznobe/Scripts/test/_______ %'
renommage du fichier : mv '/home/iznobe/Scripts/test/ bash.sh ' ==> '/home/iznobe/Scripts/test/bash.sh'
renommage du fichier : mv '/home/iznobe/Scripts/test/COM6' ==> '/home/iznobe/Scripts/test/COM6_'
renommage du fichier : mv '/home/iznobe/Scripts/test/ test : .ino ' ==> '/home/iznobe/Scripts/test/test %.ino'et pour la version " all_spaces " :
jeu. avril 16 13:42:54 iznobe@iznobe-pc:~/Scripts/test$ bash ~/Scripts/rename.sh
renommage du fichier : mv '/home/iznobe/Scripts/test/><"|?*\ :' ==> '/home/iznobe/Scripts/test/________%'
renommage du fichier : mv '/home/iznobe/Scripts/test/ bash.sh ' ==> '/home/iznobe/Scripts/test/bash.sh'
renommage du fichier : mv '/home/iznobe/Scripts/test/COM6' ==> '/home/iznobe/Scripts/test/COM6_'
renommage du fichier : mv '/home/iznobe/Scripts/test/ test : .ino ' ==> '/home/iznobe/Scripts/test/test_%.ino'ce qui me semble correct.
Dernière modification par iznobe (Le 16/04/2026, à 20:11)
Hors ligne
#87 Le 16/04/2026, à 14:47
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
tu sais que les guillemets autour des Substitutions de commandes dans une assignation sont trèèès facultatifs ?
autour des Remplacements de paramètres aussi, d'ailleurs, si il n'y a pas d'espaces qui séparent leur concaténation.
Allez , cette fois c ' est la bonne ( j ' espere :D ) :ne ferme quand même pas ton éditeur. ![]()
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#88 Le 16/04/2026, à 15:56
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Je pensais que tu allais faire une remarque , soit sur le awk , soit sur la structure générale du déroulement du script ( qui n' est pas optimale a priori , puisqu ' on y trouve 2 test pour savoir si c ' est un fichier ou un dossier ) , mais non , surprise .
Sinon , j ' ai " coherer " partout où j ' ai pu ![]()
Dernière modification par iznobe (Le 16/04/2026, à 15:57)
Hors ligne
#89 Le 16/04/2026, à 16:30
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Allez , cette fois c ' est la bonne ( j ' espere :D ) :ne ferme quand même pas ton éditeur.
je n'ai pas encore tout lu. ![]()
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#90 Le 16/04/2026, à 17:02
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Il va falloir modifier , il y a encore un truc qui cloche , il me dit toujours dans le récapitulatif :
xxx répertoires n ' ayant pas pu etre modifiésAlors que il ne devrait modifier aucun dossier ...
Sinon j ' ai modifié déjà quelques autres bricoles , le nom des variables pour le récapitulatif principalement .
je réfléchis justement pour le déroulement global du script , mais je crois que j' ai besoin d' un peu de repos avant ![]()
Dernière modification par iznobe (Le 16/04/2026, à 17:04)
Hors ligne
#91 Le 16/04/2026, à 23:18
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
21 Exclus=( CON PRN aux NUL COM{1..9} LPT{1..9} )26 for nomOriginal in "${execDir:=$PWD}/"**/*; doà cause de ~/, j'ai pris l'habitude de ne pas mettre les / dans les guillemets près d'un développement de chemin.
encore un peu d'harmonisation ,
29 if test -f "$nomOriginal"47 if [ "$all_spaces" = true ];pareil lignes 63 et 68, puis d'autres
ligne 36, le awk me paraît difficilement "bashable", par contre tu peux te passer du echo
awk -v bN="$baseName" 'BEGIN{$0=bN; gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}'si les eux awk font exactement la même chose, il faut en faire une fonction.
pour les répertoires qui ne peuvent pas être modifiés, il faut peut-être distinguer la raison de l'impossibilité : la modif a échoué ou le répertoire existe déjà
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#92 Le 17/04/2026, à 00:32
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Simplification du code , corrections de bugs du récapitulatif , intégration quelques remarques:
#!/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é
# baseName = chemin du fichier sans .ext
# $ext = extension du fichier le cas échéant sinon , renvoie le chemin complet du fichier.
# variables a ajuster :
modif_activ=false # mettre : true pour appliquer les modifications , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
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 COM{1..9} LPT{1..9} )
declare -i LongPath=0 NbRepScanned=0 NbFileScanned=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
# permet de supprimer les espaces avant l' extension de fichier :
if test -f "$nomOriginal"; then
NbFileScanned+=1
ext="${nomOriginal##*.}" # get extension without filename
if test "$nomOriginal" != "$ext"; then
baseName="${nomOriginal%.*}" # get filename without extension
baseName="$(echo $baseName | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}')" # traitement des espaces
baseName="$baseName.$ext"
else
baseName="$nomOriginal"
fi
else
NbRepScanned+=1
baseName="$nomOriginal"
fi
nomModif="$(echo $baseName | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}')" # traitement des espaces en debut et fin du nom et les espaces consécutifs au milieu du nom sont ramenés a un seul espace
#echo " nomModif apres traitement des espaces : '$nomModif'"
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?* par " _ " + les espaces ( uniques et restant ) dans les noms .
if test "$all_spaces" = true; then
nomModif="$(echo "$nomModif" | tr '><"|?*\\ :' '________%')" # version all spaces .
else
nomModif="$(echo "$nomModif" | tr '><"|?*\\:' '_______%')" # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
fi
#echo " nomModif apres traitement des caracteres spéciaux : '$nomModif'"
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}" >= 248 || "${#nomModif}" >= 32384 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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
if test -e "$nomModif" ; then # on verifie si il existe un dossier du meme nom avant de renommer
NbRepNOTModified+=1
echo "$NbRepNOTModified 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 test "$modif_activ" = true; then
mkdir -p "$nomModif"
echo "on va renommer le répertoire avec la commande suivante : mkdir $nomOriginal => $nomModif"
NbRepModified+=1
echo "$NbRepModified CREER_REP : mkdir $nomModif" >> /tmp/modifs
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
if test -e "$nomModif" ; then # on verifie si il existe un fichier du meme nom avant de renommer
NbFileNOTModified+=1
echo "$NbFileNOTModified 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 "renommage du fichier : mv '$nomOriginal' ==> '$nomModif'"
if test "$modif_activ" = true; then
mv "$nomOriginal" "$nomModif"
NbFileModified+=1
echo "$NbFileModified RENOM : mv $nomOriginal en : $nomModif" >> /tmp/modifs
fi
fi
fi
fi
done
echo "$NbRepScanned dossiers et $NbFileScanned fichiers traités, $NbRepModified répertoires modifiés, $NbFileModified fichiers modifiés , le tout en $(($(date +%s)-Debut)) secondes."
echo;
(( NbFileModified || NbRepModified )) && echo "liste des dossiers et fichiers modifiés dans '/tmp/modifs'"
(( NbRepModified )) && echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"
if (( NbFileNOTModified || NbRepNOTModified )); then
echo;
echo "$NbFileNOTModified fichiers , $NbRepNOTModified répertoires n ' ayant pas pu etre modifiés"
echo "liste des erreurs dans '/tmp/error.log'"
echo;
fi
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"si les eux awk font exactement la même chose, il faut en faire une fonction.
j ' ai essayé d' en faire une qui réunit tout le traitement qui est à faire pour les fichiers et les dossiers , mais ça ne fonctionnait pas du 1er coup ![]()
treat () {
var=$(echo $1 | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}') # traitement des espaces
if test "$all_spaces" = true; then
nomModif="$(echo "$nomModif" | tr '><"|?*\\ :' '________%')" # version all spaces .
else
nomModif="$(echo "$nomModif" | tr '><"|?*\\:' '_______%')" # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
fi
}et l ' appel :
baseName=$(treat "$baseName")ça renvoyait des trucs complétement farfelus ...
ligne 36, le awk me paraît difficilement "bashable", par contre tu peux te passer du echo
Non , il permet de " supprimer " les espaces superflus en début et surtout en fin de chaînes ...
Dernière modification par iznobe (Le 17/04/2026, à 01:18)
Hors ligne
#93 Le 17/04/2026, à 01:55
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
moui.
et il rend unique les espaces "internes" consécutifs, le + des gsub devrait ne plus être utile
?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#94 Le 17/04/2026, à 09:13
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
le echo permet de supprimer les espaces en début et en fin , le awk permet de supprimer les espaces liés a un "/" , que ce soit " /" ou "/ " et aussi de réduire les espaces multiples consécutifs a un seul espace qui resterait au milieu du nom .
Proverbe " iznobien " : quand ça tombe en marche , ne touche plus a rien ![]()
Après , là , j ' avoue que ça me semble quand même optimisable sans problème , mais ça fonctionne sur plus de 10 K fichiers sans soucis .
PS dans la fonction treat , je l' ai mise à la va vite en exemple , et je viens de voir que j' ai laissé $nomModif , bien sûr lors mon essai j ' avais remplace partout nomModif par var .
Dernière modification par iznobe (Le 17/04/2026, à 09:31)
Hors ligne
#95 Le 17/04/2026, à 10:28
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Comme j ' ai enlevé la vérification de l' ecriture ( trop de lignes inutiles ) dans une version précédente , j ' ai ajouté dans cette version , un test -w à la place .
ajout du non traitement dans le cas où le fichier est un lien .
#!/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é
# baseName = chemin du fichier sans .ext
# $ext = extension du fichier le cas échéant sinon , renvoie le chemin complet du fichier.
# variables a ajuster :
modif_activ=false # mettre : true pour appliquer les modifications , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
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 COM{1..9} LPT{1..9} CLOCK$ )
declare -i LongPath=0 NbRepScanned=0 NbFileScanned=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
# permet de supprimer les espaces avant l' extension de fichier :
if test -f "$nomOriginal"; then
NbFileScanned+=1
ext="${nomOriginal##*.}" # get extension without filename
if test "$nomOriginal" != "$ext"; then
baseName="${nomOriginal%.*}" # get filename without extension
baseName="$(echo $baseName | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}')" # traitement des espaces
baseName="$baseName.$ext"
else
baseName="$nomOriginal"
fi
else
NbRepScanned+=1
baseName="$nomOriginal"
fi
nomModif="$(echo $baseName | awk '{gsub(/\s+\/\s+/, "/"); gsub(/\/\s+/, "/"); gsub(/\s+\//, "/"); gsub(/ +/, " "); print}')" # traitement des espaces en debut et fin du nom et les espaces consécutifs au milieu du nom sont ramenés a un seul espace
#echo " nomModif apres traitement des espaces : '$nomModif'"
# remplacement d'un maxima de caractères interdits par windows : ><\:"|?* par " _ " + les espaces ( uniques et restant ) dans les noms .
if test "$all_spaces" = true; then
nomModif="$(echo "$nomModif" | tr '><"|?*\\ :' '________%')" # version all spaces .
else
nomModif="$(echo "$nomModif" | tr '><"|?*\\:' '_______%')" # echappement de "\" par le meme signe donc 2 \\ pour qu un soit remplacé
fi
#echo " nomModif apres traitement des caracteres spéciaux : '$nomModif'"
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.
# le nom du chemin ne doit pas dépasser 256 en standard , et chemin étendu 32767 max , commence par "\\?\" .
if (( "${#nomArgModif}" >= 256 || "${#nomModif}" >= 32767 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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
if test -e "$nomModif"; then # on verifie si il existe un dossier du meme nom avant de renommer et si il est modifiable
NbRepNOTModified+=1
echo "$NbRepNOTModified un dossier du meme nom existe deja : $nomModif impossible de renommer $nomOriginal" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbRepNOTModified+=1
echo "$NbRepNOTModified permission refusée : $nomModif impossible de renommer $nomOriginal" >> /tmp/error.log
else # si pas de dossier du meme nom , on renomme
if test "$modif_activ" = true; then
mkdir -p "$nomModif"
echo "on va renommer le répertoire avec la commande suivante : mkdir $nomOriginal => $nomModif"
NbRepModified+=1
echo "$NbRepModified CREER_REP : mkdir $nomModif" >> /tmp/modifs
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
if test -e "$nomModif"; then # on verifie si il existe un fichier du meme nom avant de renommer et s ' il est modifiable
NbFileNOTModified+=1
echo "$NbFileNOTModified un fichier du meme nom existe deja : $nomModif impossible de renommer $nomOriginal" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified : permission refusée : $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 "renommage du fichier : mv '$nomOriginal' ==> '$nomModif'"
if test "$modif_activ" = true; then
mv "$nomOriginal" "$nomModif"
NbFileModified+=1
echo "$NbFileModified RENOM : mv $nomOriginal en : $nomModif" >> /tmp/modifs
fi
fi
elif test -L "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified ce fichier est un lien : impossible de renommer $nomOriginal" >> /tmp/error.log
continue
fi
fi
done
echo "$NbRepScanned dossiers et $NbFileScanned fichiers traités, $NbRepModified répertoires modifiés, $NbFileModified fichiers modifiés , le tout en $(($(date +%s)-Debut)) secondes."
echo;
(( NbFileModified || NbRepModified )) && echo "liste des dossiers et fichiers modifiés dans '/tmp/modifs'"
(( NbRepModified )) && echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"
if (( NbFileNOTModified || NbRepNOTModified )); then
echo;
echo "$NbFileNOTModified fichiers , $NbRepNOTModified répertoires n ' ayant pas pu etre modifiés"
echo "liste des erreurs dans '/tmp/error.log'"
echo;
fi
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"Reste plus qu ' a tester.
EDIT : je sais pas trop pourquoi , pas vraiment creuser la question , mais j ' obtiens pas le meme comportement au niveau de la réponse sur mon pi et sur mon ordi avec le meme script ...
iznobe@m-pi3:~/test $ bash ~/rename.sh
renommage du fichier : mv '/home/iznobe/test/*' ==> '/home/iznobe/test/_ /home/iznobe/test/______ __ % /home/iznobe/test/_______ % /home/iznobe/test/COM6 /home/iznobe/test/ @pour , ù_ @ /home/iznobe/test/ @pour , ù_ @ _ /home/iznobe/test/ @pour , ù_ @ _ __ /home/iznobe/test/ @pour , ù_ @ __ /home/iznobe/test/ @pour , ù_ @ _ __ jk /home/iznobe/test/test% /home/iznobe/test/ test% fichier de test % _ /home/iznobe/test/ test % .ino '
renommage du fichier : mv '/home/iznobe/test/><"|?* \\ :' ==> '/home/iznobe/test/______ __ % /home/iznobe/test/_______ % __ %'
renommage du fichier : mv '/home/iznobe/test/><"|?*\ :' ==> '/home/iznobe/test/_______ %'
renommage du fichier : mv '/home/iznobe/test/COM6' ==> '/home/iznobe/test/COM6_'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ ' ==> '/home/iznobe/test/ @pour , ù_ @'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ *' ==> '/home/iznobe/test/ @pour , ù_ @ _ ______ __ % _______ % COM6 @pour , ù_ @ @pour , ù_ @ _ @pour , ù_ @ _ __ @pour , ù_ @ __ @pour , ù_ @ _ __ jk test% test% fichier de test % _ test % .ino '
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ * \\' ==> '/home/iznobe/test/ @pour , ù_ @ _ ______ __ % _______ % COM6 @pour , ù_ @ @pour , ù_ @ _ @pour , ù_ @ _ __ @pour , ù_ @ __ @pour , ù_ @ _ __ jk test% test% fichier de test % _ test % .ino __'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ \\ ' ==> '/home/iznobe/test/ @pour , ù_ @ __'
renommage du fichier : mv '/home/iznobe/test/ @pour , ù? @ * \\ jk ' ==> '/home/iznobe/test/ @pour , ù_ @ _ ______ __ % _______ % COM6 @pour , ù_ @ @pour , ù_ @ _ @pour , ù_ @ _ __ @pour , ù_ @ __ @pour , ù_ @ _ __ jk test% test% fichier de test % _ test % .ino __ jk'
renommage du fichier : mv '/home/iznobe/test/ test: fichier de test % ? ' ==> '/home/iznobe/test/ test% fichier de test % _'
renommage du fichier : mv '/home/iznobe/test/ test : .ino ' ==> '/home/iznobe/test/ test %.ino'
0 dossiers et 12 fichiers traités, 0 répertoires modifiés, 0 fichiers modifiés , le tout en 0 secondes.
iznobe@m-pi3:~/test $il reste forcément un truc qui ne va pas ![]()
Dernière modification par iznobe (Le 17/04/2026, à 11:02)
Hors ligne
#96 Le 17/04/2026, à 12:27
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
avec une fonction , mais il reste a corriger les espaces en fin de nom ( au minimum ) :
#!/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é
# baseName = chemin du fichier sans .ext
# $ext = extension du fichier le cas échéant sinon , renvoie le chemin complet du fichier.
# variables a ajuster :
modif_activ=false # mettre : true pour appliquer les modifications , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
execDir="" # Pour appliquer dans un dossier specifique , mettre le chemin ABSOLU du dossier ici .
#### FIN ####
shopt -s globstar
clean_complete_name() {
local baseName="$1"
# Remplacement des caractères interdits
if test "$all_spaces" = true; then
baseName=$(printf '%s' "$baseName" | tr '><"|?*\\ :' '_________')
else
baseName=$(printf '%s' "$baseName" | tr '><"|?*\\:' '________')
fi
# Nettoyage des espaces (début, fin, autour des /, multiples)
baseName=$(printf '%s' "$baseName" | sed -E '
s/^[[:space:]]+//;
s/[[:space:]]+$//;
s/[[:space:]]*\/[[:space:]]*/\//g;
s/[[:space:]]+/ /g
')
printf '%s\n' "$baseName"
}
### Liste des fichiers exclus
Exclus=( CON PRN aux NUL COM{1..9} LPT{1..9} CLOCK$ )
declare -i LongPath=0 NbRepScanned=0 NbFileScanned=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
echo;
echo "nomOriginal='$nomOriginal'"
if test -L "$nomOriginal"; then
echo "le fichier '$nomOriginal' est un lien : non traité"
nomModif="$nomOriginal"
continue
elif test -f "$nomOriginal"; then
NbFileScanned+=1
ext=${nomOriginal##*.} # get extension without filename
if test "$nomOriginal" != "$ext"; then
baseName="${nomOriginal%.*}" # get filename without extension
baseName="$(clean_complete_name "$baseName")"
nomModif="$baseName.$ext"
else
nomModif="$nomOriginal"
fi
else
NbRepScanned+=1
nomModif=$(clean_complete_name "$nomOriginal")
fi
echo "nomModif='$nomModif'"
nomArgModif=$(echo "$nomModif" | grep -o '[^/]*$') # Récupére le dernier argument
echo "nomArgModif='$nomArgModif'"
if [[ "${Exclus[*]}" == *" $nomArgModif "* ]]; then nomModif+="_"; fi # Vérifions si le nom n'est pas interdit.
# le nom du chemin ne doit pas dépasser 256 en standard , et chemin étendu 32767 max , commence par "\\?\" .
if (( "${#nomArgModif}" >= 256 || "${#nomModif}" >= 32767 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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
if test -e "$nomModif"; then # on verifie si il existe un dossier du meme nom avant de renommer et si il est modifiable
NbRepNOTModified+=1
echo "$NbRepNOTModified un dossier du meme nom existe deja : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbRepNOTModified+=1
echo "$NbRepNOTModified permission refusée : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
else # si pas de dossier du meme nom , on renomme
if test "$modif_activ" = true; then
mkdir -p "$nomModif"
echo "on renomme le dossier : mkdir '$nomOriginal' ==> '$nomModif'"
NbRepModified+=1
echo "$NbRepModified CREER_REP : mkdir '$nomModif'" >> /tmp/modifs
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
if test -e "$nomModif"; then # on verifie si il existe un fichier du meme nom avant de renommer et s ' il est modifiable
NbFileNOTModified+=1
echo "$NbFileNOTModified un fichier du meme nom existe deja : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified : permission refusée : impossible de renommer '$nomOriginal' en '$nomModif'" >> /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 "renommage du fichier : mv '$nomOriginal' ==> '$nomModif'"
if test "$modif_activ" = true; then
mv "$nomOriginal" "$nomModif"
NbFileModified+=1
echo "$NbFileModified RENOM : mv '$nomOriginal' en : '$nomModif'" >> /tmp/modifs
fi
fi
elif test -L "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified ce fichier est un lien : impossible de renommer '$nomOriginal'" >> /tmp/error.log
continue
fi
fi
done
echo "$NbRepScanned dossiers et $NbFileScanned fichiers traités, $NbRepModified répertoires modifiés, $NbFileModified fichiers modifiés , le tout en $(($(date +%s)-Debut)) secondes."
echo;
(( NbFileModified || NbRepModified )) && echo "liste des dossiers et fichiers modifiés dans '/tmp/modifs'"
(( NbRepModified )) && echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"
if (( NbFileNOTModified || NbRepNOTModified )); then
echo;
echo "$NbFileNOTModified fichiers , $NbRepNOTModified répertoires n ' ayant pas pu etre modifiés"
echo "liste des erreurs dans '/tmp/error.log'"
echo;
fi
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"Dernière modification par iznobe (Le 17/04/2026, à 13:18)
Hors ligne
#97 Le 17/04/2026, à 12:54
- Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
le awk permet [...] aussi de réduire les espaces multiples consécutifs a un seul espace qui resterait au milieu du nom
[le echo] rend unique les espaces "internes" consécutifs, le + des gsub devrait ne plus être utile
$ nom=f\ \ \ \ oo
$ echo $nom
f ooce n'est pas le echo, c'est le shell qui fait ça, parce que la variable n'est pas entre guillemets.
---
et finalement, c'est "bashable":
nom=~/\ f\ \ \ oo\ \
shopt -s extglob
echo >${nom//*( )\/*( )/\/}"
/home/watael/f oo Dernière modification par Watael (Le 17/04/2026, à 12:56)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#98 Le 17/04/2026, à 13:21
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
ce n'est pas le echo, c'est le shell qui fait ça, parce que la variable n'est pas entre guillemets.
ok .
Le probleme c ' est que la variable qui n' est pas entre guillements provoque des comportements inattendus justement , en combinaison avec le caratere "*" ...
je pensais que le awk allait permettre de supprimer ça , mais vu le résultat sur mon pi , en fait non .
Je sais pas trop comment tourner le truc ...
Avec la dernière en date : " sed " , ça fonctionne , mais il reste que je ne sais pas pourquoi , les espaces en fin de nom ne sont pas supprimés .
je ne suis meme pas sur en fait que ce soit vraiment sed le probleme .
Si tu vois une idée de pourquoi j ' obtiens :
ven. avril 17 13:23:06 iznobe@iznobe-pc:~/Scripts/test$ bash ~/Scripts/rename.sh
nomOriginal='/home/iznobe/Scripts/test/><"|?*\ :'
nomModif='/home/iznobe/Scripts/test/><"|?*\ :'
nomArgModif='><"|?*\ :'nomOriginal='/home/iznobe/Scripts/test/ bash.sh '
nomModif='/home/iznobe/Scripts/test/bash.sh '
nomArgModif='bash.sh '
renommage du fichier : mv '/home/iznobe/Scripts/test/ bash.sh ' ==> '/home/iznobe/Scripts/test/bash.sh 'nomOriginal='/home/iznobe/Scripts/test/COM6'
nomModif='/home/iznobe/Scripts/test/COM6'
nomArgModif='COM6'
renommage du fichier : mv '/home/iznobe/Scripts/test/COM6' ==> '/home/iznobe/Scripts/test/COM6_'nomOriginal='/home/iznobe/Scripts/test/ test : .ino '
nomModif='/home/iznobe/Scripts/test/test _.ino '
nomArgModif='test _.ino '
renommage du fichier : mv '/home/iznobe/Scripts/test/ test : .ino ' ==> '/home/iznobe/Scripts/test/test _.ino '
0 dossiers et 4 fichiers traités, 0 répertoires modifiés, 0 fichiers modifiés , le tout en 0 secondes.
avec :
clean_complete_name() {
local baseName="$1"
# Remplacement des caractères interdits
if test "$all_spaces" = true; then
baseName=$(printf '%s' "$baseName" | tr '><"|?*\\ :' '_________')
else
baseName=$(printf '%s' "$baseName" | tr '><"|?*\\:' '________')
fi
# Nettoyage des espaces (début, fin, autour des /, multiples)
baseName=$(printf '%s' "$baseName" | sed -E '
s/^[[:space:]]+//;
s/[[:space:]]+$//;
s/[[:space:]]*\/[[:space:]]*/\//g;
s/[[:space:]]+/ /g
')
printf '%s\n' "$baseName"
}ça me semble pourtant correct ça pour faire la suppression des espaces en fond de nom
s/[[:space:]]+$//;ha ben , j ' ai compris pourquoi , parce que c' est après l' extension ... et que du coup le script ne géré plus comme il est maintenant ![]()
EDIT : je traite aussi l' extension via la fonction , et ça m ' a l' air OK :
#!/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é
# baseName = chemin du fichier sans .ext
# $ext = extension du fichier le cas échéant sinon , renvoie le chemin complet du fichier.
# variables a ajuster :
modif_activ=false # mettre : true pour appliquer les modifications , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
execDir="" # Pour appliquer dans un dossier specifique , mettre le chemin ABSOLU du dossier ici .
#### FIN ####
shopt -s globstar
clean_complete_name() {
local baseName="$1"
# Nettoyage des espaces (début, fin, autour des /, multiples)
baseName=$(printf '%s' "$baseName" | sed -E '
s/^[[:space:]]+//;
s/[[:space:]]+$//;
s/[[:space:]]*\/[[:space:]]*/\//g;
s/[[:space:]]+/ /g
')
# Remplacement des caractères interdits
if test "$all_spaces" = true; then
baseName=$(printf '%s' "$baseName" | tr '><"|?*\\ :' '_________')
else
baseName=$(printf '%s' "$baseName" | tr '><"|?*\\:' '________')
fi
printf '%s\n' "$baseName"
}
### Liste des fichiers exclus
Exclus=( CON PRN aux NUL COM{1..9} LPT{1..9} CLOCK$ )
declare -i LongPath=0 NbRepScanned=0 NbFileScanned=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
echo;
echo "nomOriginal='$nomOriginal'"
if test -L "$nomOriginal"; then
echo "le fichier '$nomOriginal' est un lien : non traité"
nomModif="$nomOriginal"
continue
elif test -f "$nomOriginal"; then
NbFileScanned+=1
ext=${nomOriginal##*.} # get extension without filename
if test "$nomOriginal" != "$ext"; then
baseName="${nomOriginal%.*}" # get filename without extension
baseName=$(clean_complete_name "$baseName")
ext=$(clean_complete_name "$ext")
nomModif="$baseName.$ext"
else
nomModif="$nomOriginal"
fi
else
NbRepScanned+=1
nomModif=$(clean_complete_name "$nomOriginal")
fi
echo "nomModif='$nomModif'"
nomArgModif=$(echo "$nomModif" | grep -o '[^/]*$') # Récupére le dernier argument
echo "nomArgModif='$nomArgModif'"
if [[ "${Exclus[*]}" == *" $nomArgModif "* ]]; then nomModif+="_"; fi # Vérifions si le nom n'est pas interdit.
# le nom du chemin ne doit pas dépasser 256 en standard , et chemin étendu 32767 max , commence par "\\?\" .
if (( "${#nomArgModif}" >= 256 || "${#nomModif}" >= 32767 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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
if test -e "$nomModif"; then # on verifie si il existe un dossier du meme nom avant de renommer et si il est modifiable
NbRepNOTModified+=1
echo "$NbRepNOTModified un dossier du meme nom existe deja : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbRepNOTModified+=1
echo "$NbRepNOTModified permission refusée : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
else # si pas de dossier du meme nom , on renomme
if test "$modif_activ" = true; then
mkdir -p "$nomModif"
echo "on renomme le dossier : mkdir '$nomOriginal' ==> '$nomModif'"
NbRepModified+=1
echo "$NbRepModified CREER_REP : mkdir '$nomModif'" >> /tmp/modifs
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
if test -e "$nomModif"; then # on verifie si il existe un fichier du meme nom avant de renommer et s ' il est modifiable
NbFileNOTModified+=1
echo "$NbFileNOTModified un fichier du meme nom existe deja : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified : permission refusée : impossible de renommer '$nomOriginal' en '$nomModif'" >> /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 "renommage du fichier : mv '$nomOriginal' ==> '$nomModif'"
if test "$modif_activ" = true; then
mv "$nomOriginal" "$nomModif"
NbFileModified+=1
echo "$NbFileModified RENOM : mv '$nomOriginal' en : '$nomModif'" >> /tmp/modifs
fi
fi
elif test -L "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified ce fichier est un lien : impossible de renommer '$nomOriginal'" >> /tmp/error.log
continue
fi
fi
done
echo "$NbRepScanned dossiers et $NbFileScanned fichiers traités, $NbRepModified répertoires modifiés, $NbFileModified fichiers modifiés , le tout en $(($(date +%s)-Debut)) secondes."
echo;
(( NbFileModified || NbRepModified )) && echo "liste des dossiers et fichiers modifiés dans '/tmp/modifs'"
(( NbRepModified )) && echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"
if (( NbFileNOTModified || NbRepNOTModified )); then
echo;
echo "$NbFileNOTModified fichiers , $NbRepNOTModified répertoires n ' ayant pas pu etre modifiés"
echo "liste des erreurs dans '/tmp/error.log'"
echo;
fi
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"Dernière modification par iznobe (Le 17/04/2026, à 13:56)
Hors ligne
#99 Le 18/04/2026, à 11:47
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
#!/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é
# FPNWE = chemin du fichier complet sans .ext
# $ext = extension du fichier le cas échéant sinon , renvoie le chemin complet du fichier.
# variables a ajuster :
modif_activ=false # mettre : true pour appliquer les modifications , false pour visualiser les noms sans les modifier
all_spaces=false # mettre : true pour remplacer tous les espaces partout dans les noms de dossiers et de fichiers
execDir="" # Pour appliquer dans un dossier specifique , mettre le chemin ABSOLU du dossier ici .
#### FIN ####
shopt -s globstar nullglob
clean_complete_name() {
# Nettoyage des espaces (début, fin, autour des /, multiples)
local name=$(printf '%s' "$1" | sed -E '
s/^[[:space:]]+//;
s/[[:space:]]+$//;
s/[[:space:]]*\/[[:space:]]*/\//g;
s/[[:space:]]+/ /g
')
# Remplacement des caractères interdits
if test "$all_spaces" = true; then
name=$(printf '%s' "$name" | tr '><"|?*\\ :' '_________')
else
name=$(printf '%s' "$name" | tr '><"|?*\\:' '________')
fi
printf '%s\n' "$name"
}
### Liste des fichiers exclus
Exclus=( CON PRN AUX NUL NULL COM{0..9} LPT{0..9} COM¹ COM² COM³ LPT¹ LPT² LPT³ CLOCK$ )
declare -i LongPath=0 NbRepScanned=0 NbFileScanned=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
#echo;
#echo "nomOriginal='$nomOriginal'"
if test -L "$nomOriginal"; then
echo "le fichier '$nomOriginal' est un lien : non traité"
nomModif="$nomOriginal"
continue
elif test -f "$nomOriginal"; then
NbFileScanned+=1
ext=${nomOriginal##*.} # get extension without filename
if test "$nomOriginal" != "$ext"; then
FPNWE="${nomOriginal%.*}" # get filename without extension
FPNWE=$(clean_complete_name "$FPNWE")
fileNameWE=${FPNWE##*/} # get only filename without path
if [[ "${Exclus[*]}" == *" $fileNameWE "* ]]; then FPNWE+="_"; fi
ext=$(clean_complete_name "$ext")
nomModif="$FPNWE.$ext"
else
nomModif=$(clean_complete_name "$nomOriginal")
fi
else
NbRepScanned+=1
nomModif=$(clean_complete_name "$nomOriginal")
fi
#echo "nomModif='$nomModif'"
nomArgModif=$(echo "$nomModif" | grep -o '[^/]*$') # Récupére le dernier argument
#echo "nomArgModif='$nomArgModif'"
if [[ "${Exclus[*]}" == *" $nomArgModif "* ]]; then nomModif+="_"; fi # Vérifions si le nom n'est pas interdit.
# le nom du chemin ne doit pas dépasser 256 en standard , et chemin étendu 32767 max , commence par "\\?\" .
if (( "${#nomArgModif}" >= 256 || "${#nomModif}" >= 32767 )) ; then # Vérifions si la longueur n'est pas excessive
LongPath+=1
echo "chemin de fichier ou de 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
if test -e "$nomModif"; then # on verifie si il existe un dossier du meme nom avant de renommer et si il est modifiable
NbRepNOTModified+=1
echo "$NbRepNOTModified un dossier du meme nom existe deja : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbRepNOTModified+=1
echo "$NbRepNOTModified permission refusée : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
else # si pas de dossier du meme nom , on renomme
if test "$modif_activ" = true; then
mkdir -p "$nomModif"
echo "on renomme le dossier : mkdir '$nomOriginal' ==> '$nomModif'"
NbRepModified+=1
echo "$NbRepModified CREER_REP : mkdir '$nomModif'" >> /tmp/modifs
fi
fi
elif test -f "$nomOriginal" ; then # si c est un fichier
if test -e "$nomModif"; then # on verifie si il existe un fichier du meme nom avant de renommer et s ' il est modifiable
NbFileNOTModified+=1
echo "$NbFileNOTModified un fichier du meme nom existe deja : impossible de renommer '$nomOriginal' en '$nomModif'" >> /tmp/error.log
elif test ! -w "$nomOriginal"; then
NbFileNOTModified+=1
echo "$NbFileNOTModified : permission refusée : impossible de renommer '$nomOriginal' en '$nomModif'" >> /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 "renommage du fichier : mv '$nomOriginal' ==> '$nomModif'"
if test "$modif_activ" = true; then
mv "$nomOriginal" "$nomModif"
NbFileModified+=1
echo "$NbFileModified RENOM : mv '$nomOriginal' en : '$nomModif'" >> /tmp/modifs
fi
fi
fi
fi
done
echo "$NbRepScanned dossiers et $NbFileScanned fichiers traités, $NbRepModified répertoires modifiés, $NbFileModified fichiers modifiés , le tout en $(($(date +%s)-Debut)) secondes."
echo;
(( NbFileModified || NbRepModified )) && echo "liste des dossiers et fichiers modifiés dans '/tmp/modifs'"
(( NbRepModified )) && echo "pour supprimer les dossiers vides , copiez collez la commande suivante : find '${execDir:=$PWD}' -type d -empty -delete"
if (( NbFileNOTModified || NbRepNOTModified )); then
echo;
echo "$NbFileNOTModified fichiers , $NbRepNOTModified répertoires n ' ayant pas pu etre modifiés"
echo "liste des erreurs dans '/tmp/error.log'"
echo;
fi
(( LongPath )) && echo "vous avez $LongPath répertoires de taille trop importante. Voir le détail dans /tmp/error.log"Hors ligne
#100 Le 19/04/2026, à 21:31
- iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba
Par contre c' est 3 fois plus long qu ' avant ![]()
Hors ligne