Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

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.

#1 Le 05/12/2021, à 16:46

iznobe

[RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour , j' aimerais savoir si vous savez ou est ce que je pourrais trouver un script ou un petit logiciel , qui permet de renommer les fichiers en masse a la sauce windows ?

question subsidiare : toujours pas de remplacant pour PYrenamer en python-3 ?

EDIT : script fonctionnel : https://forum.ubuntu-fr.org/viewtopic.p … #p22519739

Dernière modification par iznobe (Le 29/12/2021, à 13:29)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#2 Le 05/12/2021, à 18:22

erresse

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour,
Il y a Inviska Rename pour remplacer PyRenamer qui ne fonctionne plus en python3...
Personnellement, j'ai opté pour la version en AppImage de Inviska, afin de ne pas être dépendant des versions du système *buntu et j'en suis satisfait, ça marche bien et ça offre pas mal de possibilité, à l'instar de PyRenamer.
À toi de voir, fais un test, si ça ne te convient pas, il suffit de supprimer le fichier appimage et c'est tout.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 05/12/2021, à 18:26

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour erresse et merci pour l' info .
je viens d' editer la page de doc pour inviska rename , qui n ' est plus mis a jour et qui n ' est plus " trouvable " meme en appimage .
je ne peux donc tester hmm


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#4 Le 05/12/2021, à 18:31

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour
Cela veut-il dire que  tu veux vérifier que:
    - La longueur totale du nom y compris le répertoire ne dépasse pas 256 caractères
    - Certains caractères interdits ne  sont pas présents   / \ : ? * < > " barre verticale.
    - Il n'y a pas plusieurs espaces consécutifs dans les noms
Pour les deux derniers contrôles, J'ai fait  un script correctif qui me semblait au point.  Il est dans forum. Je vais le retrouver.
=> La version initiale https://forum.ubuntu-fr.org/viewtopic.php?id=2060108

Dernière modification par geole (Le 05/12/2021, à 18:52)

En ligne

#5 Le 05/12/2021, à 18:37

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

@geole , oui c ' est exactement ca , j' ai besoin de corriger les noms sur mon serveur samba , pour l' acces via windobe pour ma femme ...

c' est pas faute , depuis 15 ans , de tenter de la convertir , mais elle a la peau dure tongue

PS : Pour la longueur du chemin ( 256 caracteres ) , ca n' est pas vraiment necessaire .

Dernière modification par iznobe (Le 05/12/2021, à 18:40)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#6 Le 05/12/2021, à 19:03

erresse

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Pour l'appimage de Inviska, je l'ai trouvé sur AppImageHub.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#7 Le 05/12/2021, à 20:32

Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Il y a certainement beaucoup mieux à faire qu'une boucle

mais surtout, pourquoi répéter la même opération 20 fois ?

et pourquoi ne pas continuer avec le Remplacement de paramètres plutôt que d'appeler tr ou sed ?

et pourquoi faire un sleep ?


Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 05/12/2021, à 21:06

Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

le g à la fin du sed effectue un remplacement global, c'est-à-dire qu'il remplacera tous les motifs cherchés.


Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 06/12/2021, à 10:17

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour ,
@ erresse , merci , c ' est telechargé , reste plus qu 'a testé wink
@geole , merci pour le script , je vais tenter de regarder ca de plus pres .
@Watael , si tu te sens de reecrire le script pour l ' ameliorer , je suis pret a faire des tests .

je suis tout de meme relativement surpris qu ' il n ' existe pas deja quelquechose " de tout pret " , je veux dire dans les depots , ou bien un script specifique , qui a été longuement testé , samba existant de puis tres longtemps , tout ceux qui l' utilise sont forcement confronté a ce petit soucis un jour ou l' autre .

ayant beaucoup de fichiers et dossiers en partage , je me vois mal me faire le check de chaque dossier , pour y trouver les fichiers non conformes et les renommer a la main .
et n' etant pas un crack avec bash et les commandes sed etc ... je me vois mal creer moi-meme un tel script .

Dernière modification par iznobe (Le 06/12/2021, à 12:57)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#10 Le 06/12/2021, à 15:35

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour
J'ai modifié le script.
1) Conditions d'utilisation:
- Se positionner dans le répertoire  à traiter par exemple $HOME  ou /media/data/$USER
- Lancer le script ci-après par la technique copier/colle.r

2) Résultats espérés.
- Les espaces de début et de fin de nom des répertoires et fichiers sont supprimés.
- Si plusieurs espaces à l'intérieur des noms, il en est conservé un seul . Mais c'est juste une ligne à activer  si on souhaite remplacer les espaces uniques par le caractère "_".
- Les caractères interdits de microsoft sont remplacés par ! sauf : et \ qui sont remplacés par %
    Cela se fait pour tous les niveaux  alors que peut-être, seul le nom de fichier l'exige.
- Les noms interdits de microsoft sont complétés par le caractère "_".
    Cela se fait pour tous les niveaux  alors que peut-être, seul le nom de fichier l'exige.
- La commande de renommage exécutée est affichée. Les erreurs ne sont pas traitées et sont affichées.
-  La taille des noms intermédiaires des répertoires est vérifiée, maxima 248 caractères. Idem pour le noms des fichiers (Mais cela devrait être 260 caractères.
-  La taille totale du chemin d'accès est vérifiée à la valeur 32767.
- La durée d'exécution du script et le nombre de fichiers hors norme est affiché. La liste est consultable.

3) Exemple:  Un chemin d'accès tel que
"    REP       1  /   Sous  REP:     /   LPT1   /   Fichier    23*     "  sera renommé en
"REP 1/Sous REP%/LPT1_/Fichier 23!"

4) Résultat d'un passage

on va renommer ce répertoire/fichier avec cette commande mv -n '     FIC    A  ' FIC A
on va renommer ce répertoire/fichier avec cette commande mv -n ' SOUS   REP ' SOUS REP
on va renommer ce répertoire/fichier avec cette commande mv -n ' SOUS   REP /     FIC    A    b     ' SOUS REP/FIC A b
on va renommer ce répertoire/fichier avec cette commande mv -n ' SOUS   REP / SOUS   REP  B    W' SOUS REP/SOUS REP B W
on va renommer ce répertoire/fichier avec cette commande mv -n ' SOUS   REP / SOUS   REP  B    W/     FIC    A    b     q ' SOUS REP/SOUS REP B W/FIC A b q
on va renommer ce répertoire/fichier avec cette commande mv -n ' SOUS   REP / SOUS   REP  B    W/ SOUS   REP  B    W   x  q ' SOUS REP/SOUS REP B W/SOUS REP B W x q

6 répertoires et fichiers traités en 1 secondes.

Autre exemple

........
on va renommer ce répertoire/fichier avec cette commande mv -n 'Rugby/Tournoi 2014 des 6 nations/Pays de Galles -  Italie 1e Mi-temps.avi' Rugby/Tournoi 2014 des 6 nations/Pays de Galles - Italie 1e Mi-temps.avi
5774 répertoires et fichiers traités en 232 secondes.

5) Plusieurs répertoires peuvent devenir un seul répertoire avec leurs fichiers regroupés si non semblables. Exemple
"  Rep / fic1"
"        Rep/fic1"
"        Rep/  fic2"
devrait donner le résultat
"Rep/fic1"
"Rep/fic2"
"        Rep/fic1"

6) Pour exécuter une simulation, il suffit de supprimer  cette ligne.

            mv  "$l"  "$j"

7) Script

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;  Debut=$(echo $(date +%s)); echo [url]https://www.pcastuces.com/pratique/astuces[/url] > /tmp/LongFic

for i in **/*; do  
    Nbrep=$(($Nbrep+1)) 
    #isolons le nom de fichier
    i2=$(echo "$i" | grep -o '[^/]*$' );  
    #suppression des espaces de début et de fin
    j=$(echo $i) ;
    #suppression de l'espace   qui suit le caractère /
    j=$(echo "$j" | sed  "s#/ #/#g")
    #suppression de l'espace   qui précède le caractère /
    j=$(echo "$j" | sed  "s# /#/#g")
    #remplacement des espaces restants
    #j=$(echo "$j" | sed  "s# #_#g")
    
    # remplacement d'un maxima de caractères interdits par windows ><\:"|?*
    j=$(echo "$j"  | tr '><"|?*' '!!!!!!') 
    j=$(echo "$j"  | tr ':' '%') 
    j=$(echo "$j"  | tr '\\' '%') 
    
    #Vérifions si le nom n'est pas interdit. Récupération du dernier argument
    j2=$(echo "$j" | grep -o '[^/]*$' )
    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 ]]; then Long=$(($Long+1)); echo $j >>/tmp/LongFic ; fi  
    if [[ ${#j}   -ge 32384 ]]; then Long=$(($Long+1)); echo $j >>/tmp/LongFic ; fi  #########
    
    # Changeons le nom si besoin    
    if [[ $i != $j ]]; then 
       # Récupérons le nom du répertoire au cas où il aurait été corrigé.
       j1=$(echo "$j" | rev | cut -d/  --complement -s -f1 | rev)
       if [[ ${#j1}  >   0 ]];then l="$j1/$i2"; else l="$i"; fi      
             mv  "$l"  "$j"  1>/dev/null 2>/tmp/script
             if [[ $? !=  1 ]]; then
                 echo on a renommé ce répertoire/fichier avec cette commande mv -n   "'$i'"  "$j"
             else
                 if grep -q "identifient le même fichier" /tmp/script ; then b=b;
                    else
                    if grep -q "vers un sous-répertoire de lui-même" /tmp/script ; then b=b;
                    else
                        cat /tmp/script
                    fi  
                fi
            fi     
    fi  
done
if [[ $Long > 0 ]]; then echo vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic ; fi
echo $Nbrep répertoires et fichiers traités en  $(($(date +%s)-$Debut)) secondes.

Dernière modification par geole (Le 28/12/2021, à 16:47)

En ligne

#11 Le 06/12/2021, à 20:13

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour , je viens de faire un test du script suivant :
le contenu du repertoire avant execution :

iznobe@iznobe-PC:/datas/iznobe/Scripts/test$ ls -l
total 4
-rw-r--r-- 1 iznobe iznobe    0 avril 29  2021 ' ><\:"|?* lurt.txt'
-rwxr--r-- 1 iznobe iznobe 2005 déc.   6 20:03  rename_windows_share.sh
iznobe@iznobe-PC:/datas/iznobe/Scripts/test$

la commande utilisée et son retour :

iznobe@iznobe-PC:/datas/iznobe/Scripts/test$ 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)
#Nombre de répertoires de taille trop importantes
Long=0

for i in **/*; do 
    #echo Début de traitement sur  " |""$i""|"  
    # remplacement des espaces par un seul underscore
    j=$(echo $i | sed 's/\s\+/_/g' )
    #suppression du underscore qui suit le caractère /
    j=$(echo "$j" | sed  "s\/_\/\g")
    #suppression du underscore qui précède le caractère /
    j=$(echo "$j" | sed  "s\_/\/\g")
    
    # remplacement d'un maxima de caractères interdits par windows ><\:"|?*
    j=$(echo "$j"  | tr '><"|?*' '!!!!!!') 
    j=$(echo "$j"  | tr ':' '%') 
    j=$(echo "$j"  | tr '\\' '%') 
    #echo "|""$j""|"
    
    #Vérifions si le nom n'est pas interdit. Récupération du dernier argument
    k=$(echo $j | grep -o '[^/]*$' )
    if [[ " ${Exclus[@]} " =~  $k  ]]; then j=$j"_" ; fi
    
    #Vérifions si la longueur n'est pas excessive
    if [[ ${#j} -ge 260 ]]; then Long=$(($Long+1))  ; fi

    if [[ $i != $j ]]; then
        if [[ -d $j ]]; then
             echo " Il est impossible de changer le nom de ce fichier/dossier '$i' car présence de doublon au niveau répertoire"
        else
              if [[ -f $j ]]; then
                 echo " Il est impossible de changer le nom de ce fichier/dossier '$i' car présence de doublon au niveau fichier"
              else
                   # vérifier si le répertoire/fichier existe
                   if [[ -e $i ]]; then
                      echo "on va renommer ce répertoire/fichier avec cette commande mv -n   '$i'  '$j' "
                      mv -n "$i"  "$j"
                   fi
              fi
         fi
    fi  
if [[ $Long > 0 ]]; then echo vous avez $Long répertoires de taille importante  voir https://www.pcastuces.com/pratique/astuces/4815.htm ; fi
on va renommer ce répertoire/fichier avec cette commande mv -n   ' ><\:"|?* lurt.txt'  '!!%%!!!!_lurt.txt' 
iznobe@iznobe-PC:/datas/iznobe/Scripts/test$

le contenu du repertoire apres execution :

iznobe@iznobe-PC:/datas/iznobe/Scripts/test$ ls -l
total 4
-rw-r--r-- 1 iznobe iznobe    0 avril 29  2021 '!!%%!!!!_lurt.txt'
-rwxr--r-- 1 iznobe iznobe 2005 déc.   6 20:03  rename_windows_share.sh
iznobe@iznobe-PC:/datas/iznobe/Scripts/test$ 

ca fonnctionne pour les caracteres interdits dans les noms de fichiers pour windows , je vais tester les autres trucs , longueur de chemin etc et vous tiendrais au courant .

Dernière modification par iznobe (Le 06/12/2021, à 20:19)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#12 Le 06/12/2021, à 23:26

Coeur Noir

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Doit bien y avoir moyen de demander à Samba de n'accepter que des noms de fichiers/dossiers compatibles Win ?

Je comprends bien que la demande initiale est un peu différente ( les fichiers existent déjà avec des noms non conformes, d'où besoin de les renommer pour partage ultérieur via samba )
mais une fois cela fait on doit pouvoir « forcer » un nommage adapté ?

Des choses comme https://serverfault.com/a/72041 et le name mangling évoqué vers la fin du message.


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#13 Le 07/12/2021, à 08:03

serged

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Il ne faut pas oublier non plus que Windows, contrairement à Linux n'est pas sensible à la casse.

Donc il faut éviter les conflits entre "toto" et "TOTO", dans le même répertoire.


Linux-Mint 20.3 Una (Cinnamon) sur ASUS F2A55/AMD A8-5600K APU et diverses machines en 19.3 ou 20.x

Hors ligne

#14 Le 07/12/2021, à 11:11

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour , ben decidement , ca m' a l' air tout de meme relativement complexe cette histoire .

@coeur noir , j ' ai regardé le lien et la doc de samba pour le " name mangling " , il me semble que c' est deja ce qui est fait par defaut , j' ai justement ce type de nom qui apparait quand les noms de fichiers ne sont pas conforme au nommage windows , sauf que , les premiers caracteres ne correspondent pas au premiers caracteres du nom de fichier en question , le resultat parait plutot completement aleatoire .
De plus ca n' a pas l' air des plus simples de comprendre ce que ca fait exactement , et parait complexe a regler ...
il doit y avoir un genre de hash ou je ne sais trop quoi ... enfin bref , c ' est justement pour ca que je voudais renommer correctement mes fichiers , c ' est tres difficile de retrouver le fichier en question coté serveur , la seule façon , a peu pres " potable " que j' ai trouvé , c ' est de noté le chemin et la taille du fichier fautif , puis de me rendre sur le serveur au meme emplacement et d ' afficher la liste par taille , puis de trouver le nom de fichier incriminé .
souvent il s ' agit d ' un caractere interdit , mais pas toujours , et alors là ca devient complexe , mais surtout c ' est tres tres long ...

j ' ai des repertoires avec 6000 fichiers photos a peu pres de meme taille et  des centaines de sous repertoires ...

Dernière modification par iznobe (Le 25/12/2021, à 18:07)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#15 Le 25/12/2021, à 14:49

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour et joyeu noel a tous !

je viens de tester le script sur mon repertoire de musique , il a l' air d e fonctionner normalement , mais il affiche des erreurs .

Dernière modification par iznobe (Le 28/12/2021, à 10:18)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#16 Le 25/12/2021, à 15:10

Watael

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

mais... un script, ça se colle dans un fichier ! ça ne s'envoie pas directement dans le terminal .:O


Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 25/12/2021, à 16:17

MicP

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour

… j ' ai un fichier par exemple "fi  chier" ( avec 2 espaces consecutifs au milieu du nom ) …

Il faudrait vérifier qu'il s'agit bien d'une suite de caractères espace (0x20)
et pas des espaces insécables ou autre joyeuseté du même genre

Ci dessous, il n'y a qu'un seul de ces fichiers dans lequel il y a une suite de deux caractères espaces.

michel@debbull:~$ hd <<< "fi  chier"
00000000  66 69 20 20 63 68 69 65  72 0a                    |fi  chier.|
0000000a
michel@debbull:~$ hd <<< "fi  chier"
00000000  66 69 e2 80 8b 20 20 63  68 69 65 72 0a           |fi...  chier.|
0000000d
michel@debbull:~$ hd <<< "fi  chier"
00000000  66 69 20 c2 a0 63 68 69  65 72 0a                 |fi ..chier.|
0000000b
michel@debbull:~$ hd  <<< 'fi  chier'
00000000  66 69 c2 a0 20 63 68 69  65 72 0a                 |fi.. chier.|
0000000b
michel@debbull:~$ hd  <<< fi  chier
00000000  66 69 c2 a0 c2 a0 63 68  69 65 72 0a              |fi....chier.|
0000000c
michel@debbull:~$

Dernière modification par MicP (Le 25/12/2021, à 16:23)


Retour utilisable de commande
2.d  Le prompt final : - permet de s'assurer que la commande est allée à son terme,- permet de s'assurer que la réponse du système n'est pas coupée à la fin,- et fournit parfois d'autres informations, détaillées au message #42

Hors ligne

#18 Le 25/12/2021, à 16:21

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour MicP , dans les test effectués ci-dessus , j ' ai moi-meme créé le fichier avec des espaces "normaux" .

Mais je viens de voir dans le script le commenaire suivant :

#suppression des espaces à droite et à gauche mais pas au milieu

donc logiquement le script ne traite pas les espaces au milieu du nom de fichier je suppose , tout simplement .

iznobe@iznobe-PC:~/Scripts/test$ ls -l
total 4
-rw-rw-r-- 1 iznobe iznobe    0 déc.  25 16:10 'fi   chier   .   test'
-rw-rw-r-- 1 iznobe iznobe    0 déc.  25 16:04 'fi  chier  .  test'
-rw-r--r-- 1 iznobe iznobe    0 avril 29  2021 '!!%%!!!!_lurt.txt'
-rwxr--r-- 1 iznobe iznobe 2005 déc.   6 20:03  rename_windows_share.sh
iznobe@iznobe-PC:~/Scripts/test$ ls fi*chier*
'fi   chier   .   test'  'fi  chier  .  test'
iznobe@iznobe-PC:~/Scripts/test$

Dernière modification par iznobe (Le 25/12/2021, à 16:25)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#19 Le 25/12/2021, à 16:25

MicP

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

iznobe a écrit :

… le script ne traite pas les espaces au milieu du nom de fichier …

Effectivement smile

=======
Oui, et ça fichier quand même qu'il puisse exister d'aussi mauvais caractères,
et tout ça à cause de cette police qui prête à confusion. lol

Dernière modification par MicP (Le 25/12/2021, à 16:37)


Retour utilisable de commande
2.d  Le prompt final : - permet de s'assurer que la commande est allée à son terme,- permet de s'assurer que la réponse du système n'est pas coupée à la fin,- et fournit parfois d'autres informations, détaillées au message #42

Hors ligne

#20 Le 25/12/2021, à 17:17

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Désolé, le script fonctionne et traite les espaces du milieu en les remplaçant  par le caractère _
Si on ne veut pas  ce remplacement on enlève la commande indiquée
exemple
1) Situation avant

a@a:~/TEST$ ls -ls
total 0
0 -rw-rw-r-- 1 a a 0 déc.  25 17:13 'FIC                     FIC'
0 -rw-rw-r-- 1 a a 0 déc.  25 17:13 'FIC      FIC'
a@a:~/TEST$

2) exécution du script
Je rappelle que le script est la https://forum.ubuntu-fr.org/viewtopic.p … #p22512800

Je complète
Il est impossible de changer le nom de ce fichier/dossier 'FIC      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 ; fia@a:~/TEST$ echo $Nbrep répertoires et fichiers traités en  $(($(date +%s)-$Debut)) secondes.
2 répertoires et fichiers traités en 2 secondes.
a@a:~/TEST$ 

a@a:~/TEST$ ls -ls
total 0

0 -rw-rw-r-- 1 a a 0 déc.  25 17:13 'FIC      FIC'
0 -rw-rw-r-- 1 a a 0 déc.  25 17:13  FIC_FIC
a@a:~/TEST$ 

Si j'enlève les deux lignes
  #remplacement des espaces restants
    j=$(écho "$j" | sed  "s# #_#g")

Le résultat va être

a@a:~/TEST$ for i in **/*; do  
>     Nbrep=$(($Nbrep+1)) 
>     #isolons le nom de fichier
>     i2=$(echo "$i" | grep -o '[^/]*$' );  
>     #suppression des espaces de début et de fin
>     j=$(echo $i) ;
>     #suppression de l'espace   qui suit le caractère /
>     j=$(echo "$j" | sed  "s#/ #/#g")
>     #suppression de l'espace   qui précède le caractère /
>     j=$(echo "$j" | sed  "s# /#/#g")  
>     # remplacement d'un maxima de caractères interdits par windows ><\:"|?*
>     j=$(echo "$j"  | tr '><"|?*' '!!!!!!') 
>     j=$(echo "$j"  | tr ':' '%') 
>     j=$(echo "$j"  | tr '\\' '%') 
>     
>     #Vérifions si le nom n'est pas interdit. Récupération du dernier argument
>     j2=$(echo "$j" | grep -o '[^/]*$' )
>     if [[ " ${Exclus[@]} " =~  $j2  ]]; then k="$j""_" ; else k="$j"; fi
> 
>     #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
>     
>     if [[ $i != $j ]]; then 
>        # Récupérons le nom du répertoire au cas où il aurait été corrigé.
>        j1=$(echo "$j" | rev | cut -d/  --complement -s -f1 | rev)
>        if [[ ${#j1}  >   0 ]];then l="$j1/$i2"; else l="$i"; fi      
>        if [[ -d $k ]]; then
>           echo " Il est impossible de changer le nom de ce fichier/dossier '$i' car présence de doublon au niveau répertoire"
>        else
>           if [[ -f $k ]]; then
>              echo " Il est impossible de changer le nom de ce fichier/dossier '$i' car présence de doublon au niveau fichier"
>           else
>              echo on va renommer ce répertoire/fichier avec cette commande mv -n   "'$i'"  "$k" 
>              mv  "$l"  "$k"
>           fi
>        fi
>     fi  
> done
on va renommer ce répertoire/fichier avec cette commande mv -n 'FIC      FIC' FIC FIC
a@a:~/TEST$ if [[ $Long > 0 ]]; then echo vous avez $Long répertoires de taille importante. Voir le détail dans /tmp/LongFic ; fia@a:~/TEST$ echo $Nbrep répertoires et fichiers traités en  $(($(date +%s)-$Debut)) secondes.
2 répertoires et fichiers traités en 41 secondes.
a@a:~/TEST$ ls -ls
total 0
0 -rw-rw-r-- 1 a a 0 déc.  25 17:13 'FIC FIC'
0 -rw-rw-r-- 1 a a 0 déc.  25 17:13  FIC_FIC
a@a:~/TEST$ 

On voit alors que tous les espaces on bien été remplacés par un seul.

Dernière modification par geole (Le 25/12/2021, à 18:06)

En ligne

#21 Le 25/12/2021, à 17:50

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

D'accord.

Mais c'est le vieux script!!!!!!!    Je vais virer les échanges  anciens. Tant pis pour la compréhension
Mais, ma séquence me semble bonne.  A Tester chez vous.

i="         FIC               FIC        "         
echo "$i"
j=$(echo $i) ;
j=$(echo "$j" | sed  "s#/ #/#g")
j=$(echo "$j" | sed  "s# /#/#g")
echo "$j"

Résultat

a@a:~/TEST$ i="         FIC               FIC        "         
a@a:~/TEST$ echo "$i"
         FIC               FIC        
a@a:~/TEST$ j=$(echo $i) ;
a@a:~/TEST$ j=$(echo "$j" | sed  "s#/ #/#g")
a@a:~/TEST$ j=$(echo "$j" | sed  "s# /#/#g")
a@a:~/TEST$ echo "$j"
FIC FIC
a@a:~/TEST$ 

Dernière modification par geole (Le 25/12/2021, à 17:54)

En ligne

#22 Le 26/12/2021, à 12:02

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Coeur Noir a écrit :

Doit bien y avoir moyen de demander à Samba de n'accepter que des noms de fichiers/dossiers compatibles Win ?

Bonjour
Il faut monter le répertoire avec l'option windows_names

En ligne

#23 Le 26/12/2021, à 12:07

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

iznobe a écrit :

..... il reste le problème avec les noms de fichiers comportant des [  ] et le fait que les fichiers ne sont pas modifiés dans un répertoire qui a besoin lui aussi d ' être modifié ..

C'est pour cela que j'ai fait un autre script..... Afin de traiter tout en un passage au lieu de traiter un niveau par passage.

Il me semble que ces caractères [  ] ne sont pas interdits   . Mais il serait facile de les remplacer par  (  )

En ligne

#24 Le 27/12/2021, à 18:33

iznobe

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

A priori c' est en rapport avec les noms exclus :

Exclus=(CON PRN aux NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9)
if [[ " ${Exclus[@]} " =~  $j2  ]]; then j="$j""_" ; fi

d ' une part il ne fait ca qu ' avec les dossiers , ca veut dire que les noms de fichiers identique a la liste eclus sont autorisés , mais pas les nom de dossiers ?
oou la dernier ligne de code comporte un bug ?
exemple de sortie du script en mode simulation :

iznobe@iznobe-PC:/datas/iznobe/Scripts/teste$ ../test.sh
on va renommer ce répertoire avec la commande suivante : mkdir 'a_'
on va renommer ce répertoire avec la commande suivante : mkdir 'test 25'
on va renommer ce fichier avec la commande suivante : mv 'test                      25/a'  'test 25/a'
on va renommer ce répertoire avec la commande suivante : mkdir 'test 25/teste2'
on va renommer ce répertoire avec la commande suivante : mkdir 'test 25/teste2/teeste 3'
on va renommer ce répertoire avec la commande suivante : mkdir 'test 25/teste2/teeste 3/C_'
on va renommer ce fichier avec la commande suivante : mv 'test                      25/teste2     /                              teeste    3                     /N'  'test 25/teste2/teeste 3/N'
on va renommer ce répertoire avec la commande suivante : mkdir 'test 25/teste2/teeste 3/O_'
on va renommer ce fichier avec la commande suivante : mv 'test                      25/u'  'test 25/u'
on va renommer ce fichier avec la commande suivante : mv 'test                      25/x'  'test 25/x'
on va renommer ce répertoire avec la commande suivante : mkdir 'u_'
on va renommer ce répertoire avec la commande suivante : mkdir 'x_'

16 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

liste des fichiers modifiés ou pas dans '/tmp/modifs' et '/tmp/nomodifs'

iznobe@iznobe-PC:/datas/iznobe/Scripts/teste$

retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#25 Le 27/12/2021, à 19:38

geole

Re : [RESOLU] script mettre en conformité les noms de fichiers samba

Bonjour iznobe

Dans la séquence originale, il y a effectivement bug
extrait des trois lignes à corriger

  #Vérifions si le nom n'est pas interdit. Récupération du dernier argument
    j2=$(echo "$j" | grep -o '[^/]*$' )
    if [[ " ${Exclus[@]} " =~  $j2  ]]; then k="$j""_" ; else k="$j"; fi
 

    #Vérifions si la longueur n'est pas excessive
    if [[ ${#k}  -ge   248 ]]; then Long=$(($Long+1)); echo $j >>/tmp/LongFic ; fi   ###############
    if [[ ${#k}   -ge 32384 ]]; then Long=$(($Long+1)); echo $j >>/tmp/LongFic ; fi  ##############
    
    if [[ $i != $k ]]; then  #######################################
       # Récupérons le nom du répertoire au cas où il aurait été corrigé.

Dans les trois lignes  avec #############   Je reprenais le nom du dernier paramètre  ($j2) avant passage dans ce contrôle    qui est maintenant k !!!!!!

Dernière modification par geole (Le 27/12/2021, à 19:46)

En ligne