IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apple Discussion :

[Débutant] Renommer en masse dans le terminal


Sujet :

Apple

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut [Débutant] Renommer en masse dans le terminal
    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. #2
    Membre émérite

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    734
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 734
    Par défaut
    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/

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mikysett Voir le message
    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
    http://www.manytricks.com/namemangler/ (donationware)
    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
    une fois dans vi exécuter la commande qui va lister les fichiers qui vous intéresse via la commande "read" (:r) et l'exécution en shell (le !)
    par exemple, ceci va lister les mpeg3 du directory courant
    générer les commandes "mv" via le find and replace (:s, le % indique tout le texte à partir du début)
    changer le nom de destination, ici toutes les extensions mpeg3 sont changées en mp3 (le $ dans le pattern signifie 'fin de ligne')
    et si tout est ok : pour exécuter réellement les commandes… via la commande write (:w) dans un shell (!), et sh désignant le programme recevant les commandes (un shell lui aussi…) (:w pathfilename écrira le texte dans un fichier)

    et pour quitter sans sauver (et sans exécuter)…
    )

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    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. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mikysett Voir le message
    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à )
    en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls *.mp3 | sed 's/\(.*\)/mv "\1" "\1"/' | sed 's/mv "\(.*\)" "...\(.*\)"/mv "\1" "\2"/'
    pour tester… et ajoutez " | sh" à la fin pour exécuter…

    dans vi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    :r ! ls *.mp3
    :%s/.*/mv "&" "&"/
    :%s/mv "\(.*\)" "...\(.*\)"$/mv "\1" "\2"/
    notez l'ajout des " pour ne pas avoir de problèmes avec les noms de fichiers contenant des espaces…

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    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, je suis perdu)


    sed 's/mv "\(.*\)" "...\(.*\)"/mv "\1" "\2"/' (... , idem)

    | 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. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mikysett Voir le message
    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, je suis perdu)


    sed 's/mv "\(.*\)" "...\(.*\)"/mv "\1" "\2"/' (... , idem)

    | 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,
    sed c'est un éditeur de fichier texte qui travaille ligne par ligne…
    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…

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/02/2010, 16h36
  2. Impossible de renommer une table dans FireBird
    Par WebPac dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2006, 12h12
  3. [Débutant] Triage de données dans un String
    Par Poilou dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/01/2004, 16h21
  4. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59
  5. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo