• [^] # Re: Une fonction du shell

    Posté par . En réponse au message Besoin d'aide pour un petit script de renommage. Évalué à 4.

    Je crois que c'est tout à fait ce que je cherchais. En revanche, il vaut mieux indiquer un double ## pour gérer correctement les noms de fichiers qui contiennent des points :

    mv "1ドル" "${2%.*}.${1##*.}"

    L'explication de la ligne pour ceux que ça intéresse (dont moi !) :

    * ${2%.*} : on cherche un pattern qui commence par un point suivi de caractères (.*), donc en gros, on cherche l'extension du fichier. On retire ce pattern du contenu de la variable ${2}. Mais attention, on ne veut retirer que le plus petit pattern qui correspond avec notre expression (%). Example :
    file="/path/to/the/file.sfx.tar"; tmp=${file%.*}; echo $tmp donnera /path/to/the/file.sfx.
    Alors qu'avec l'utilisation de %%, qui cette fois, retire la plus grande correspondance avec l'expression :
    file="/path/to/the/file.sfx.tar"; tmp=${file%%.*}; echo $tmp donnera /path/to/the/file, puisque .sfx.tar correspond à l'expression .*.

    * ${1##*.} : ce coup ci, on cherche à retirer l'expression inverse, c'est à dire des caractères suivi d'un point (.*), afin d'isoler le suffixe. L'emploi du double dièse ## signifie qu'on cherche la plus grande correspondance possible avec l'expression (ce qui donnera donc le plus petit suffixe). Example :
    file="/path/to/the/file.sfx.tar"; tmp=${file##*.}; echo $tmp donnera tar.
    En revanche, avec l'utilisation de #, qui retire la plus petite correspondance :
    file="/path/to/the/file.sfx.tar"; tmp=${file#*.}; echo $tmp donnera sfx.tar.