![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Mac Avant de poster: Lire La FAQ Mac; Voir la page Outils; Voir les tutoriels. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2007
Localisation: Guadeloupe
Âge: 17
Messages: 31
|
Bonjour à tous,
Après mainte recherches et... recherches, infructueuses, je me suis dit qu'il fallait créer un post J'ai souvent des fichiers à renommer, comme de la musique... Par exemple : 01 - Artiste - Chanson.mp3 ... J'ai opté pour notre ami automator, qui fait la chose très bien quand il s'agit d'enlever par exemple "Artiste - " (Une suite de caractères qui ne change pas) Mais il ne semble pas supporter les expressions régulières (que je ne maîtrise pas tant que ça d'ailleurs)... Alors j'ai cherché un peu une solution terminal, c'est cp à ce qu'il parait... Seulement je ne sais pas quelle est la façon de procéder pour le terminal, il me faudrait sûrement une boucle, un regex (enlever les premiers 5 caractères pas exemple) et puis c'est tout Voilà voilu, en espérant que c'est pas trop bête
|
|
|
|
|
|
#2 (permalink) |
|
Membre chevronné
![]() Date d'inscription: janvier 2005
Messages: 613
|
La commande cp effectue une copie, mais pas un renommage. La commande de renommage/déplacement est "mv".
Si tu recherches des processus automator, tu peux en trouver ici : http://www.apple.com/downloads/macosx/automator/
__________________
Envie de me défier? |
|
|
|
|
|
#3 (permalink) | |
|
Membre émérite
![]() Date d'inscription: septembre 2006
Messages: 730
|
Citation:
http://www.publicspace.net/ABetterFinderRename/ (commercial) http://www.lifehacker.com.au/tips/20...renamer-2.html (freeware) sinon en terminal, les outils de base utiles sont : find ou ls pour sélectionner les fichiers à renommer perl, awk, sed pour faire le traitement du pattern test pour vérifier si le nom généré n'existe pas déjà… mv pour faire le changement de nom (l'option -i provoque la demande d'une confirmation si le fichier destination existe déjà…) … mais si vous débuttez en Unix, soyez très prudent en expérimentant le rename de nombreux fichiers via la ligne de commande avec des patterns … les espaces, les ' et ", les <, > dans les noms de fichiers sont autant de pièges pour le shell Unix… (faites toujours une version du script qui génère ses commandes en sortie sans les exécuter et vérifiez si tout est correct avant toute exécution… vous pouvez même utilisez vi pour voir les commandes avant de les exécuter : dans terminal : lancer vi Code :
vi par exemple, ceci va lister les mpeg3 du directory courant Code :
:r !ls *.mpeg3 Code :
:%s/.*/mv & &/ Code :
:%s/mpeg3$/mp3/ Code :
:w !sh Code :
:q! |
|
|
|
|
|
|
#4 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2007
Localisation: Guadeloupe
Âge: 17
Messages: 31
|
Merci Tarul pour le lien, mais j'avais déjà regardé... Rien de chez rien qui puisse faire ce dont j'ai besoin
JeitEmgie... waouh... je suis vraiment nul dans le terminal, et de surquoit je ne me rappelle plus trop des expressions régulières... alors voilà j'ai peu compris Mais j'ai envie de faire ça par moi même dans le terminal plutôt que d'installer un énième soft. Alors voilà, laissons tomber vi... c'est si j'ai bien compris un "sandbox"... beh, on va dire que je copie les fichiers que je veux renommer et je travaille sur la copie, sa sera plus simple Après... la commande mv... Je n'ai pas même pu comprendre comment marchaient ses arguments (faut rien donner pour acquis alors voilà, exemple pratique : enlever les trois premiers caractères à partir du début et garder le reste pour tous les fichiers du dossier où je me suis placé grâce à cd ... J'étais tenté de faire des choses comme : [3*][*] 2 Mais évidemment, sa fait du bon temps que j'ai pas jeté un coup d'oeil à un regex, et là, bah, voilà le résultat Voilà voilu,merci d'avance, et puis, si vraiment sa vous embête j'vais chercher de la doc pour mv (avant j'savais même pas la commende à faire, s'est dur de chercher dans ces cas là |
|
|
|
|
|
#5 (permalink) | |
|
Membre émérite
![]() Date d'inscription: septembre 2006
Messages: 730
|
Citation:
Code :
ls *.mp3 | sed 's/\(.*\)/mv "\1" "\1"/' | sed 's/mv "\(.*\)" "...\(.*\)"/mv "\1" "\2"/' dans vi Code :
:r ! ls *.mp3 :%s/.*/mv "&" "&"/ :%s/mv "\(.*\)" "...\(.*\)"$/mv "\1" "\2"/ |
|
|
|
|
|
|
#6 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2007
Localisation: Guadeloupe
Âge: 17
Messages: 31
|
JeitEmgie merci beaucoup, c'est maaaagique
Seulement... C'est que sa marche, mais je ne comprend pas tout... Et, si sa vous emmerde pas, j'aimerais poser quelques questions (mais bon, si vraiment c'est chiant je vais chercher un tuto et vous laisser en paix, Décomposons : ls *.mp3 | (sa liste tout ce qui fini par .mp3... j'imagine que c'est surtout parce que, en quelque sorte, sa "sélectionne" tout ce qui fini par .mp3 et sa nous permet de travailler dessus.. le "|", j'imagine que c'est pour passer la main à la commande d'après) sed 's/\(.*\)/mv "\1" "\1"/' | (... sed 's/mv "\(.*\)" "...\(.*\)"/mv "\1" "\2"/' (... | sh (sa execute.. C'est aussi qu'en cherchant des explications sur le web... c'est souvent trop vague, il n'y a pas assez d'explications, |
|
|
|
|
|
#7 (permalink) | |
|
Membre émérite
![]() Date d'inscription: septembre 2006
Messages: 730
|
Citation:
il prend en paramètre la commande à exécuter sur chaque ligne ici c'est "s" pour substitute et ses paramètres : delimeter pattern à rechercher delimiter pattern de substitution delimiter le delimiter servant à borner le pattern, ici c'est / la règle étant : on prend un delimiter qui n'intervient pas dans le pattern à rechercher… (on aurait pu prendre $ par exemple…) pour éviter de devoir utiliser \ ce qui allourdi la lecture… le pattern à rechercher : .* soit toute la ligne mais comme on a besoin d'utiliser la valeur de ce que l'on trouve on le met entre parenthèses mais comme on ne cherche pas "n'importe quoi entre parenthèses" on doit les "escaper" d'où \( dans le pattern de susbtitution \1 signifie la valeur du pattern de recherche se trouvant dans le premier jeu de parenthèses (on peut avoir plusieurs jeux, le suivant sera \2, etc jusqu'à \9 max) et 's/.*/mv & &/' ferait exactement la même chose… avec une autre syntaxe : le & signifiant la dernière valeur prise dans le pattern recherché… le point important c'est les " pour éviter les problèmes avec les fichiers dont le nom contient des espaces… |
|
|
|
|
|
|
#8 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2007
Localisation: Guadeloupe
Âge: 17
Messages: 31
|
merci encore, c'est déjà plus claire...
Il y a cependant encore des choses assez vagues... Je me dis aussi que pour débuter vaut mieux ne pas utiliser sed... C'est un outil supplémentaire à expliquer, sa fait beaucoup Il y a aussi une chose, c'est que je ne vois pas où on lui dit d'enlever les trois premiers caractères... c'était plus facile en php |
|
|
|
|
|
#9 (permalink) | |
|
Membre émérite
![]() Date d'inscription: septembre 2006
Messages: 730
|
Citation:
|
|
|
|
|
|
|
#10 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2007
Localisation: Guadeloupe
Âge: 17
Messages: 31
|
okok...
Mais... pourquoi on utilise deux fois la commande s et 4 fois la commande mv? il ne suffirait pas de : mv "\(.*\)" "...\(.*\)" Car, si j'ai bien compris, il dit de prendre tout le nom et de substituer par tout le nom moins les trois premiers chiffres. D'ailleurs je n'ai pas compris pourquoi on dit .* et pas * (puisque apparemment les deux désignent "tout". Enfin bref, j'ai déjà saisi plus que je n'espérais Merci encore ! |
|
|
|
|
|
#11 (permalink) | |
|
Membre émérite
![]() Date d'inscription: septembre 2006
Messages: 730
|
Citation:
. signifie n'importe quel caractère donc il faut vraiment faire .* car * tout seul ne signifie rien… (on peut écrire [A-Z]* qui signifie n'importe quel caractère de A à Z, pris 0 ou plusieurs fois…) on ne fait pas plusieurs mv : il apparaît plusieurs fois dans les patterns … si l'on veut faire la substitution en 1 seul sed : Code :
sed 's/\(...\)\(.*\)/mv "\1\2" "\2"/' |
|
|
|
|
![]() |
![]() |
||
[Débutant] Renommer en masse dans le terminal
|
||
| Outils de la discussion | |
|
|