2010-12-10 7 views
21

Je veux traduire le code python suivant en bash. Le code modifie le nom de l'extension en .html et exécute Safari pour l'ouvrir.Comment puis-je changer le nom de l'extension dans une chaîne avec bash?

#!/usr/bin/env python 
import os.path 
import os 

oldName = $TM_FILEPATH 
(name, ext) = os.path.splitext(oldName) 
rename = name + ".html" 
os.system("open -a Safari %s" % rename) 

Comment puis-je changer l'extension du fichier avec bash?

Répondre

63
file=somefile.whatevs 
open -a Safari "${file%.*}.html" 
+3

Wow, c'est élégant. –

+0

Il y a une bonne explication sur [superutilisateur] (https://superuser.com/a/1119299/347427): "Quand' '' '' est utilisé dans le modèle '$ {variable% substring}', il retournera le contenu de la variable avec l'occurrence la plus courte de la sous-chaîne supprimée à l'arrière de la variable. " – bcattle

0

Si vous connaissez l'extension que vous pouvez passer comme ceci:

$ MY_FILE=file.html 
$ NEW_EXT=${MY_FILE/html/php} 
$ echo ${NEW_EXT} 
file.php 
+0

Que faire si son nom my_html_file.html et je veux obtenir my_html_file.php? – Sergei

+0

alors vous pouvez écrire la substitution pour correspondre au point indiquant l'extension 'new_ext = $ {mon_fichier/.html/.php}' – dinigo