Pages : 1
#1 Le 27/01/2007, à 21: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, à 10:44)
#2 Le 27/01/2007, à 21: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, à 21:51)
Hors ligne
#3 Le 27/01/2007, à 22: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 27/01/2007, à 23: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, à 00:00)
Hors ligne
#5 Le 28/01/2007, à 00: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, à 00: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, à 00: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, à 00:17)
Hors ligne
#8 Le 28/01/2007, à 12: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, à 12: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 )
#! /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, à 12:51)
Hors ligne
#10 Le 28/01/2007, à 13: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, à 15:52)
"Si tu as mal à la tête, pense à enlever l'enclume qui est posée dessus."
Hors ligne
#11 Le 28/01/2007, à 13: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, à 14: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, à 14: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, à 15: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, à 15: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
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
Dernière modification par Doby (Le 28/01/2007, à 16:00)
Software is like Sex, it's better when it's Free
Hors ligne
#16 Le 29/01/2007, à 23: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, à 00:07)
Hors ligne
#17 Le 30/01/2007, à 00:10
- any
Re : [Résolu]Renommage (._* En *.icns)
joli sequence sed !
c'est ce qui m'as tjs plus dans unix !
#18 Le 30/01/2007, à 00: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