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 27/01/2007, à 22:29

Compte anonymisé

[Résolu]Renommage (._* En *.icns)

Salut,

Voilà j'ai un lot de fichiers  ex : "._iPhone" ou encore "._iPod" etc..., qui sont des icônes MAC.

Je voudrais faire un script qui me mette un nom devant et l'extension .icns derrière ex: _iPhone.icns

"Et qu'il fasse ce rennomage par lot."

Je renomme à la main ce "._iPhone" en Iphone.icns et j'arrive à le convertir en .png.
Mais bon, comme j'en ai beaucoup, les renommer à la main serait impossible.

Je n'y connait rien en script, mais alors rien.
Si un connaisseur pouvait m'aider ce serait vraiment sympa.
Merci par avance.
Bye.

Dernière modification par Compte anonymisé (Le 30/01/2007, à 11:44)

#2 Le 27/01/2007, à 22:49

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Ne sachant pas exactement comment tu comptes utiliser ton script, voici ce que je te porpose :
copie ceci dans un fichier en .sh (par exemple renommeICNS.sh

#! /bin/bash
while read i
do
   mv "$i" "`echo $i | cut -c2-`.icns"
done

Pour autoriser l'exécution de ton script, dans une console tape

chmod +x renommeICNS.sh

Enfin, pour l'utiliser, tape

ls -1 ta_liste_de_fichiers | renommeICNS.sh

Tu peux bien évidemment remplacer ta_liste_de_fichiers par .* si tu veux, par exemple, remplacer tous les fichiers du répertoire courant commençant par un point, ou utiliser toute complétion automatique du terminal (*, ?, etc) pour aller plus vite.

Dernière modification par Spalax (Le 27/01/2007, à 22:51)

Hors ligne

#3 Le 27/01/2007, à 23:57

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Et paf : script clef en main !

#! /bin/bash
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read i
do
   mv  "$i" "`dirname $i`/`basename $i | cut -c2-`.icns"
done

Hors ligne

#4 Le 28/01/2007, à 00:43

Spalax

Re : [Résolu]Renommage (._* En *.icns)

C'est bizarre, cela fonctionne chez moi...

Idée : pour exécuter ce script, il ne faut pas simplement cliquer sur le dossier contenant les fichiers à renommer, ou cliquer dans ce dossier, mais sélectionner les fichiers à renommer, et y appliquer ce script.

Est-ce bien ce que tu as fait ?

Dernière modification par Spalax (Le 28/01/2007, à 01:00)

Hors ligne

#5 Le 28/01/2007, à 01:05

Spalax

Re : [Résolu]Renommage (._* En *.icns)

C'est une coquille, désolé ; il fallait lire « sélectionner ».

Hors ligne

#6 Le 28/01/2007, à 01:07

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Sinon, comment veux tu qu'ils se nomment après ?
Pour l'instant, mon script se contente d'enlever le point qui est devant, et d'ajouter l'extension.

Mais veux-tu choisir pour chaque fichier quel nom mettre ?

Hors ligne

#7 Le 28/01/2007, à 01:14

Spalax

Re : [Résolu]Renommage (._* En *.icns)

En fait, il ne fonctionne pas pour les noms contenant des espaces. Voici le script corrigé :

 #! /bin/bash
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read i
do
   if [ -n "$i" ]
   then
      mv  "$i" "`dirname "$i"`/`basename "$i" | cut -c2-`.icns"
   fi
done

Et de rien

PS : si tu veux enlever les deux premiers caractères plutôt que le premier seulement (pour enlever également le tiret bas), remplace « cut -c2- » par « cut -c3- ».

Dernière modification par Spalax (Le 28/01/2007, à 01:17)

Hors ligne

#8 Le 28/01/2007, à 13:20

Doby

Re : [Résolu]Renommage (._* En *.icns)

@Golgot200 :
Il te suffit de reprendre le script de Spalax et d'y ajouter une ligne du type :

sed "s/_/ /g"

Ps : n'ayant pas Nautilus sous la main je ne peux pas te donner le script modifié mais en cherchant un petit peu ca devrait ce faire tout seul

Amicalement
Doby


Software is like Sex, it's better when it's Free

Hors ligne

#9 Le 28/01/2007, à 13:34

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Merci Doby pour l'utilisation de sed (il faudra un jour que j'apprenne à m'en servir big_smile)

#! /bin/bash
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read i
do
   if [ -n "$i" ]
   then
      mv  "$i" "`dirname "$i"`/`basename "$i" | cut -c3- | sed "s/_/ /g"`.icns"
   fi
done

Cela transformera « ._pom_pom_pom » en « pom pom pom.icns » et « ._Tagada Tsoin_Tsoin » en « Tagada Tsoin Tsoin.icns ».

Dernière modification par Spalax (Le 28/01/2007, à 13:51)

Hors ligne

#10 Le 28/01/2007, à 14:02

CoolCubix

Re : [Résolu]Renommage (._* En *.icns)

Hé ho attendez les amis là, personne a pensé à rename ?

Genre pour mettre l'extension .extension à tous les fichiers du répertoire (sauf commençant par un point) :

rename 's/$/.extension/' *

Pour enlever le point au début de chaque fichier commençant par un point :

rename 's/^\.//' .?*

Pour virer les underscores (aux fichiers qui ne commencent pas par un point) :

rename 's/_/ /g' *

Et tout ça grâce aux regexp... Je comprends pas pourquoi vous vous ennuyez à faire des scripts incompréhensibles avec des pipes etc !

Dernière modification par CoolCubix (Le 28/01/2007, à 16:52)


"Si tu as mal à la tête, pense à enlever l'enclume qui est posée dessus."

Hors ligne

#11 Le 28/01/2007, à 14:12

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Très intéressante cette commande !
Je la garde dans  un coin de ma tête.

Merci

Hors ligne

#12 Le 28/01/2007, à 15:33

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Je ne suis pas capable de te répondre.
Un man rename donne

rename 'y/a-z/A-Z/' *

Mais cela est pour mettre tous les caractères en majuscule. Ce doit être une piste à creuser. CoolCubix pourra peut-être nous en dire plus.

PS : cela me rappelle une réflexion que je m'étais déjà faite : « tout script que je peux faire existe déjà en plus performant »

Hors ligne

#13 Le 28/01/2007, à 15:53

CoolCubix

Re : [Résolu]Renommage (._* En *.icns)

Je suis en train de chercher et j'arrive pas à faire parler google sur une page qui documente y// ...


"Si tu as mal à la tête, pense à enlever l'enclume qui est posée dessus."

Hors ligne

#14 Le 28/01/2007, à 16:12

CoolCubix

Re : [Résolu]Renommage (._* En *.icns)

Bon, une petit doc ici : http://www.grymoire.com/Unix/Sed.html#uh-49, mais pas moyen de le faire pour UN seul caractère...


"Si tu as mal à la tête, pense à enlever l'enclume qui est posée dessus."

Hors ligne

#15 Le 28/01/2007, à 16:57

Doby

Re : [Résolu]Renommage (._* En *.icns)

@golgot 200
Je viens de lire ta remarque sur la majuscule a chaque debut de mot, 2 secondes je recherche un script que j'avais fait qui s'occupais de ca et je t le met direct tongue

for file in *.*
do
	first=`echo "$file" | cut -c1`
	first=`echo $first | tr [a-z] [A-Z]`
	rest=`echo "$file" | cut -c2-0`
	mv $file $first"$rest"
done

Enjoy it smile

Dernière modification par Doby (Le 28/01/2007, à 17:00)


Software is like Sex, it's better when it's Free

Hors ligne

#16 Le 30/01/2007, à 00:59

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Hé ben mon cochon, j'en ai eu du mal !
Enfin, voila un script plutôt simple (malgrés les apparences) qui fait ce que tu veux, golgot200 :

#! /bin/sh
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read i
do
   mv "$i" "`dirname "$i"`/`basename "$i" | sed -e 's/$/.icns/' -e 's/^._//' -e 's/_/ /g' -e 's/^\([a-z]\)/\U\1/g' -e 's/ \([a-z]\)/ \U\1/g'`"
done

Explications sur les commandes sed :
(ce que j'appelle ici nom désigne le nom de fichier, qui est composé de plusieurs mots séparés par des espaces)
's/$/.icns/' remplace les fins de noms par .icns
's/^._//' supprime les débuts de noms ._
's/_/ /g' remplace les tirets bas par des espaces
's/^\([a-z]\)/\U\1/g' remplace la première lettre du nom par la majuscule correspondante (notez le \U qui fait tout ; je l'ai cherché longtemps, le \U...)
's/ \([a-z]\)/ \U\1/g' idem avec les débuts de mots

Pour CoolCubix : la commande rename n'accepte a priori pas les remplacements multiples (option -e pour sed), et je n'ai pas souhaité chercher plus longtemps ; c'est pour cela que j'ai tout de même utilisé sed, bien que rename semble plus adapté à notre problème.

Dernière modification par Spalax (Le 30/01/2007, à 01:07)

Hors ligne

#17 Le 30/01/2007, à 01:10

any

Re : [Résolu]Renommage (._* En *.icns)

joli sequence sed ! tongue

c'est ce qui m'as tjs plus dans unix !

#18 Le 30/01/2007, à 01:18

Spalax

Re : [Résolu]Renommage (._* En *.icns)

Sed est tout de même assez puissant. Je le découvre à peine, mais je sais qu'on peut faire un Sokoban (entre autres) avec !
http://aurelio.net/sed/sokoban/

Hors ligne