Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

renommer_automatiquement_les_fichiers_d_un_dossier [2008/05/07 13:13]
renommer_automatiquement_les_fichiers_d_un_dossier [2017/02/21 15:10] (version actuelle)
Ligne 1: Ligne 1:
 +====== Introduction ======
 +
 +Cet article présente un **script bash** en vue de renommer de manière automatique certains fichiers d'un dossier, et notamment ceux qui ont des **espaces** ou **blancs**.
 +
 +Dans la plupart des systèmes d'exploitation, y compris windaube, passer des noms de fichiers en arguments peut devenir rapidement problématique s'ils contiennent des blancs, car ces blancs ont sauf précautions particulières l'effet de créer plusieurs arguments, ce qui va au mieux faire planter le traitement, au pire effectuer des actions non souhaitées.
 +
 +Le script effectue encore d'autres traitements, par exemple la suppression de certains caractères spéciaux et la factorisation de caractères consécutifs identiques. Il a été conçu à l'origine pour modifier des noms de chansons **mp3** ou **ogg** "rippées" à partir d'un CD ou obtenues par d'autres sources (de manière légale s'entend 8-)), ces noms étant souvent un vrai charabia pas du tout adapté aux "us et coutumes" d'un "Linuxien de base"...
 +
 +Article rédigé par **Jeanmm** ;-)\\
 +Version initiale : 17/06/2006.
 +
 +====== Le script ======
 +
 +Le script contient assez de commentaires pour expliquer les traitements réalisés. On donne à la suite quelques remarques complémentaires. On pourra donc l'adapter à ses besoins, par exemple en supprimer une partie ou s'en inspirer pour réaliser d'autres traitements complémentaires.
 +
 +<code bash>
 +#!/bin/sh
 +# Suppression des blancs, () et [] dans les noms des fichiers
 +# du dossier courant et remplacement par des "_" factorises.
 +# Et quelques autres bidouilles expliquees dans le code.
 +# Les fichiers modifies sont listes.
 +
 +# Auteur  : Jeanmm
 +# Date    : juin 2006
 +# Licence : GPL
 +# Lien    : http://www.root66.net/accueil/
 +
 +# Suppression des blancs, () et [],
 +# Factorisation des "_",
 +# Suppression des apostrophes.
 +
 +for a in * ; do
 +  b=$(echo "$a" | tr " ()[]" "_____" | tr -s _ _ | tr -d "'" )
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv \"$a\" \"$b\""
 +    mv "$a" "$b"
 +  fi
 +done
 +
 +# Conversion des "_-_" en "_"
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/_-_/_/g');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Conversion des "_-" en "_"
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/_-/_/g');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Conversion des "-_" en "_"
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/-_/_/g');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Suppression des "_" en debut de nom
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/^_//');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Suppression des "_" en fin de nom
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/_$//');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Conversion des ",_" en "_"
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/,_/_/g');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Conversion des "._" en "_"
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/\._/_/g');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +
 +# Conversion des "_." en "."
 +
 +for a in * ; do
 +  b=$(echo $a | sed 's/_\./\./g');
 +  if [ "$a" != "$b" ] ; then
 +    echo "mv $a $b"
 +    mv $a $b;
 +  fi
 +done
 +</code>
 +
 +===== Explications =====
 +
 +Ce script met en oeuvre deux outils couramment utilisés en mode commande pour modifier du texte :
 +
 +  * **tr** : outil qui permet de traduire certains caractères en d'autres, factoriser des caractères consécutifs et supprimer certains caractères,
 +  * **sed** : éditeur de texte qui est avec **awk** l'un des plus utilisés en ligne de commande. Les anciens qui ont connu les premiers éditeurs de texte avant l'accès direct au texte par une souris n'auront aucun mal à en maitriser la syntaxe.
 +
 +Pour plus d'infos sur ces outils on consultera les **"pages man"** ou l'abondante littérature sur le web.
 +
 +En regardant bien le script on remarquera une petite nuance entre les 2 premières commandes **echo** :
 +
 +<code bash>
 +echo "$a"
 +echo $a
 +</code>
 +
 +La variable **$a** contenant le nom d'un fichier, dans le premier cas on ne sait pas s'il y a des blancs ou non, on s'en prémunit en englobant $a avec des guillemets doubles. Dans le second cas ces guillemets sont inutiles car on vient tout juste d'éliminer les blancs. On voit donc que la syntaxe est plus contraignante si on ne connait rien des noms de fichiers, et si on omet ces précautions on pourrait aboutir aux erreurs de traitements redoutées.
 +
 
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki