Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink 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 big_smile
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 big_smile

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

iznobe a écrit :

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 big_smile

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

geole a écrit :

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 wink
---------------------------------------------------------------------------------------------------------------------------
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 tongue , 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

geole a écrit :

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 wink 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

kamaris a écrit :
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

geole a écrit :
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ébuterDocBien rédigerRetour commandeInsé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 ,

Coeur Noir a écrit :

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 wink

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 hmm

@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 lol

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 smile

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 " .

Watael a écrit :

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

Watael a écrit :

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 wink

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 roll
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 mad

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