Bonjour à tous,
En ce moment, j'ai un peu le cerveau en compote et la programmation shell n'arrangeant pas vraiment les choses, je requière votre aide.
Je voudrais faire un script qui reçoive deux noms de fichiers :
pattern1.ext1 et pattern2.ext2
et je voudrais (tout simplement), renommer le premier fichier en :
pattern2.ext1
Merci d'avance pour le prêt de vos neurones !
# mmv
Posté par Annah C. Hue (site web personnel) . Évalué à 3.
mmv "toto*.*" "#1.#2" renommmera
"totoPLOP.jpg" en "PLOP.jpg"
# Utilise cut, en fixant le point comme délimiteur
Posté par santos . Évalué à 1.
Ensuite, fX permet de récupérer le X-ième morceau suite au découpage précédent.
patern=`echo "$2" | cut -d. f1`
ext=`echo "$1" | cut -d. f2`
mv $1 $patern.$ext
[^] # Re: Utilise cut, en fixant le point comme délimiteur
Posté par santos . Évalué à 1.
# Une fonction du shell
Posté par Jacques L'helgoualc'h (site web personnel) . Évalué à 3.
[^] # Re: Une fonction du shell
Posté par Joël . Évalué à 4.
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.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.