2011
01.06

command cmd Remplacer automatiquement les espaces par des underscores dans des noms de fichiers

Voici un petit tricks sympa permettant, comme le titre l’indique, de remplacer les espaces dans des noms de fichiers par des underscores à l’aide de commandes mv, sed ou awk, ce qui peut être utile dans différents contextes, comme du renommage en masse de fichiers mp3 par exemple, ou d’autres situations plutôt particulières, mais bon on sait jamais, ça peut servir icon smile Remplacer automatiquement les espaces par des underscores dans des noms de fichiers Il existe différentes manières de faire, je vais en présenter quelques-unes qui tiennent toutes en une seule ligne de commande, sinon c’est pas marrant \o/

Toutes les commandes suivantes effectuent le même traitement des fichiers, donc une seule suffit, mais c’est toujours instructif de voir les différentes possibilités existantes afin d’arriver au même résultat icon smile Remplacer automatiquement les espaces par des underscores dans des noms de fichiers Nous verrons également une commande plus avancée permettant de faire un travail plus propre sur les fichiers.

Bien entendu ces commandes sont un exemple, en l’occurrence remplacer des espaces par des underscores, mais ça ne se limite pas à ça, car l’intérêt principal est que l’on peut adapter tout cela à ses propres besoins et travailler sur les fichiers de bien des manières différentes, donc : adaptez !

Ah et dernière info, apparemment à cause de la police merdique, les commandes en rouge contiennent des double quote pourries (<< et >>) donc si vous voulez copier-coller une commande, prenez dans les codes en exemples icon smile Remplacer automatiquement les espaces par des underscores dans des noms de fichiers

Méthode avec mv

for file in * ; do mv -T « $file » ${file// /_};done

[ex0@ex0dus tmp]# ls -l
cisco catalyst 3550 conf.txt
juniper ex4200 conf.gz
aaa bbb ccc
[ex0@ex0dus tmp]# for file in * ; do mv -T "$file" ${file// /_};done
[ex0@ex0dus tmp]# ls -l
cisco_catalyst_3550_conf.txt
juniper_ex4200_conf.gz
aaa_bbb_ccc

Méthode avec sed

IFS= » »;for i in *;do mv $i $(echo $i | sed -r ‘s/\s+/_/g’);done

[ex0@ex0dus tmp]# ls -l
cisco catalyst 3550 conf.txt
juniper ex4200 conf.gz
aaa bbb ccc
[ex0@ex0dus tmp]# IFS="";for i in *;do mv $i $(echo $i | sed -r 's/\s+/_/g');done
[ex0@ex0dus tmp]# ls -l
cisco_catalyst_3550_conf.txt
juniper_ex4200_conf.gz
aaa_bbb_ccc

Méthode avec awk

IFS= » »;for i in *;do mv $i $(echo $i | awk ‘{ gsub(/ /, « _ »);print}’);done

[ex0@ex0dus tmp]# ls -l
cisco catalyst 3550 conf.txt
juniper ex4200 conf.gz
aaa bbb ccc
[ex0@ex0dus tmp]# IFS="";for i in *;do mv $i $(echo $i | awk '{ gsub(/ /, "_");print}');done
[ex0@ex0dus tmp]# ls -l
cisco_catalyst_3550_conf.txt
juniper_ex4200_conf.gz
aaa_bbb_ccc

Petit bémol à ces commandes, si vous avez d’autres fichiers dans le répertoire qui eux ne possèdent pas d’espaces, la commande va essayer de le parser aussi et va nous sortir un petit message d’erreur tout moche, comme par exemple celui-ci :

[ex0@ex0dus tmp]# ls -l
cisco catalyst 3550 conf.txt
ns5gt.txt
[ex0@ex0dus tmp]# for file in * ; do mv -T "$file" ${file// /_};done
mv: `ns5gt.txt' et `ns5gt.txt' identifient le même fichier.

Rien de grave, ça n’a absolument aucune influence sur le(s) fichier(s) en question, mais certains (dont moi) préfèrerai avoir un résultat plus « propre », et c’est tout l’intérêt de la commande suivante qui, sous ses airs barbares, effectuera un travail plus intelligent et ne parsera que les fichiers contenant des espaces, donc pas de messages d’erreurs, donc la classe x)

Méthode avancée avec awk

ls | awk ‘{if (NF > 1) {print $0}}’|awk ‘toto=$0 { gsub(/ /, « _ »);print « mv », »\ » »toto »\ » »,$0}’| sh

[ex0@ex0dus tmp]# ls -l
cisco catalyst 3550 conf.txt
juniper ex4200 conf.gz
aaa bbb ccc
ns5gt.txt
aaabbbccc.conf
[ex0@ex0dus tmp]# ls | awk '{if (NF > 1) {print $0}}'|awk 'toto=$0 { gsub(/ /, "_");print "mv","\""toto"\"",$0}'| sh
[ex0@ex0dus tmp]# ls -l
cisco_catalyst_3550_conf.txt
juniper_ex4200_conf.gz
aaa_bbb_ccc
ns5gt.txt
aaabbbccc.conf

Bon voilà, rien d’exceptionnel, ni de très intéressant d’ailleurs, mais comme je l’ai déjà dis, ça peut toujours servir, surtout si vous l’adaptez à vos besoins icon smile Remplacer automatiquement les espaces par des underscores dans des noms de fichiers

Be Sociable, Share!
  • more Remplacer automatiquement les espaces par des underscores dans des noms de fichiers

Aucun commentaire.

Ajoutez votre commentaire