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.

#1 Le 28/09/2021, à 07:50

jose6a

changer tous les noms de fichiers (préfix) se trouvant dans un dossier

Bonjour à tous,

j'ai un soucis, j'aimerai modifier tous les noms (à gauche de l'extension ) des fichiers contenus dans un répertoire dans
un script....j'ai jamais fait. donc c'est chaud.

faire une boucle, et pour chaque fichier
enlever les espaces, les signes spéciaux et caractères accentués du préfixe
passer au suivant.


merci infiniment pour votre aide ! :-)

José


Linux jose6a-HP-Laptop-15-fc0xxx 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun  7 15:10:09 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Hors ligne

#2 Le 28/09/2021, à 08:20

Hizoka

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

Salut,

Tu as la marche à suivre en effet.

Il faut faire des tests quand tu n'es pas sûr, tu copies des fichiers à traiter dans un dossier test dans lequel tu lance tes commandes.

# pour chaque élément du dossier actuel (fichiers et dossiers)
# Si tu veux du récursif, il faudra passer par une boucle while read avec une commande find.
for Fichier in *
do
  # Si vraiment tu ne veux pas toucher aux extensions, il te faut vérifier d'abord que ce sont des fichiers sinon dans le cas de dossier ça va être le bordel
  if [[ -f "$Fichier ]]
  then
    extFichier="${Fichier##*.}"
    NomFichier="${Fichier%.*}"

  else
    extFichier=""
    NomFichier="${Fichier}"
  fi

  # Modifications du nom du fichier, la on remplace les espaces par _  et les é en e en bash
  NewFichier="${NomFichier// /_}"
  NewFichier="${NewFichier//[éêè]/e}"
  
  # Sinon tu as sed
  NewFichier="$(sed "y/éèê/eee/" <<< "$NomFichier")

  # On remet l'extension s'il y en a une
  [[ "$extFichier" ]] && NewFichier="$NewFichier.$extFichier"

  # Vérifie que le nom a changé et que le nouveau nom n'existe pas déjà dans les fichiers avant de renommer le fichier
  [[ "$Fichier" != "$NewFichier" && ! -e "$NewFichier" ]] && mv "$Fichier" "$NewFichier"
done

Dernière modification par Hizoka (Le 28/09/2021, à 08:26)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 28/09/2021, à 09:51

jose6a

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

hey !
merci beaucoup pour ta réponse, rapide et détaillée ....
bon, je suis vraiment hyper débutant, et surtout malheureusement, je n'ai besoin
du shell que très très très peu souvant.

j'ai "brutalement" fait un copier coller de ton code dans un terminal (oui, je sais ... c'est nul) , j'imagine que
se serait mieux de le coller dans fichier texte  truc.txt et de l'executé avec bash truc.txt  ? c'est çà ?

cependant, en collant ton code dans le terminal, j'ai obtenu 2 erreurs qui vont surement te dire quelque chose
(pas à moi) :

<<

>   # On remet l'extension s'il y en a une
>   [[ "$extFichier" ]] && NewFichier="$NewFichier.$extFichier"
bash: erreur de syntaxe dans une expression conditionnelle
bash: erreur de syntaxe près de « [[ »
>   # On remet l'extension s'il y en a une
>   [[ "$extFichier" ]] && NewFichier="$NewFichier.$extFichier"
bash: erreur de syntaxe dans une expression conditionnelle
bash: erreur de syntaxe près de « [[ »

>>

Merci de ton aide.
José


Linux jose6a-HP-Laptop-15-fc0xxx 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun  7 15:10:09 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Hors ligne

#4 Le 28/09/2021, à 10:12

Hizoka

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

Ah ouais, Je te file une ébauche et toi tu la balances comme ça, c'est bien risqué quand même...

Il manque un " à la fin de la ligne NewFichier="$(sed "y/éèê/eee/" <<< "$NomFichier").

Le script n'est pas absolument pas terminé, tu as tout ce qu'il te faut mais il te faut réfléchir à ce que tu veux faire exactement...
Pour le moment, il ne remplace que les é è ê en e...

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


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 28/09/2021, à 14:25

jose6a

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

hello ! oui, c'est risqué, mais, l'ordi sur lequel j'ai testé ne risque rien, d'une part et
d'autres part, j'aime bien apprendre avec les erreurs smile

bon ton script etait une ébauche, avec juste un ' " ' manquant ... donc .... déjà super bien !

du coup, en effet, je suis aller fouarfouiller ici : https://www.it-swarm-fr.com/fr/linux/li … 042857628/
j'en ai extrait : 
<< for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done   >>
pour tout mettre en majuscule

et  une commande "rename" que j'ai installée  pour remplacer les é en E

voilà, me reste plus qu'a trouver comment remplaecer les espaces en  "_"

quelle aaventura! en tout cas merci pour ton aide !

José


Linux jose6a-HP-Laptop-15-fc0xxx 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun  7 15:10:09 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Hors ligne

#6 Le 28/09/2021, à 15:35

ar barzh paour

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

jose6a a écrit :

voilà, me reste plus qu'a trouver comment remplaecer les espaces en  "_"

tu as la une réponse dans le #4

nom="Est-Ce un NOM"
nom="$(sed "y/ /_/" <<< "$nom")"
echo $nom
Est-Ce_un_NOM

et une autre de pingouinux avec rename dans le post suivant

Dernière modification par ar barzh paour (Le 28/09/2021, à 15:40)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#7 Le 28/09/2021, à 15:36

pingouinux

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

Bonjour,
Par exemple, pour changer les noms des fichiers (ou répertoires) ayant une extension de 3 caractères :

rename -n 's/é|è|ê/e/g;s/à|â/a/g;s/ /_/g' *.???

Cette commande ne fait rien, et t'indique ce qu'elle fera si tu enlèves -n.
En cas de destination existant déjà, la commande n'écrasera pas le fichier et te préviendra.

Hors ligne

#8 Le 28/09/2021, à 17:31

Hizoka

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

Mouais.... pfff.... à peine mieux que ce que je proposais lol

C'est une commande que je n'utilise jamais alors qu'elle est bien plus adaptée...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 06/02/2022, à 17:05

jose6a

Re : changer tous les noms de fichiers (préfix) se trouvant dans un dossier

helllo les zamis ! bon pardon de ce silence qui n'est pas d'or ...
Merci pour ces informatins ! toujours beaucoup de trucs à apprendre avec Linux ...
Merciiiii
José


Linux jose6a-HP-Laptop-15-fc0xxx 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun  7 15:10:09 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Hors ligne