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


ASUS K75V series
Icore5 8Go Ram
18.04.3 LTS

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)

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é


ASUS K75V series
Icore5 8Go Ram
18.04.3 LTS

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)

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é


ASUS K75V series
Icore5 8Go Ram
18.04.3 LTS

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          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400 Ubuntu 20.04 , 18.04 22.04 (test)
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 20.04 ( 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...

Hors ligne