• [^] # Re: "ren" roxor

    Posté par . En réponse au message Renommer plusieurs fichiers en même temps. Évalué à 5.

    > J'ai une mandrake 10.0 et le programme "ren" n'est pas proposé.

    Argh. Pas de bol...
    Enfin, tu peux toujours te l'installer from-sources si tu veux :
    http://freshmeat.net/projects/ren(...)

    > Peux-tu m'expliquer la syntaxe de "album${i#??}

    `man bash` :p

    Bon, nan, c'est tout simple: "${variable#pattern}" s'évalue en la variable (là c'était notre nom de fichier, $f) dont on retire au début (c'est l'opérateur "#" qui le dit) le pattern (dans notre cas, "??", c'est à dire deux caractères quels qu'ils soient).

    Pour ta culture, les patterns peuvent être des chaines quelconques ou bien contenir des caractères spéciaux (jokers ou wildcards ou que sais-je encore), qui seront interprétés comme pour l'expansion des noms de fichiers :
    - "*" reconnait une chaine quelconque (celui là t'es au moins familier dans le cas de l'expansion des noms de fichiers, genre `ls *.jpg`)
    - "?" reconnait un caractère quelconque
    - "[abc]" reconnait les cactères "a", "b", ou "c"
    - "[0-9]" reconnait les chiffres de 0 à 9 (on aurait pu l'utiliser ici d'ailleurs, genre "album${f#[0-9][0-9]}"), "[a-z]" les lettres miniscules de "a" à "z", etc.

    En plus de l'opérateur "#", y'en a qlqs autres dans le même genre:

    - "##" fait presque pareil sauf qu'il choisi si ambiguité la plus longue des correspondance ("#" lui prend la plus courte, enfin de toute façon ça ne fait une différence que si on utilise "*" qui est le seul wildcard de longueur variable)

    - "%" et "%%" marchent pareil, sauf qu'ils suppriment à la fin de la chaine contenue par la variable

    - "/" est un opérateur de substitution:
    # foo="plip plop plip plop plip"
    # echo "${foo/plop/pluuuup}"
    plip pluuuup plip plop plip

    - "//" aussi, sauf qu'il fait autant de substitutions que possible, et pas juste la première:
    # echo "${foo//plop/pluuuup}"
    plip pluuuup plip pluuuup plip

    Bon, maintenant `man bash` pour plus de détails et les autres opérateurs... (cherches la section "EXPANSION", sous-section "Parameter Expansion". Elle est bonne à connaitre.)

    Et quant au "album" en début de chaine, je suppose que tu auras deviné :)