Une alternative Python un peu longue mais utilisable. En supposant que votre nommage est cohérent avec ce que vous avez dans l'exemple, vous pourriez utiliser cette fonction dans votre fichier ~/.bashrc
. ( Faites attention aux caractères "\". Il ne doit pas y avoir d'espace après, seulement une nouvelle ligne.)
rename_photos()
{
python -c 'import os,re,sys; \
[ os.rename(f, "photo_"+sys.argv[1]+\
"_"+sys.argv[2]+"_"+re.split("[_.]",f)[-2]+\
"."+re.split("[_.]",f)[-1]) \
for f in os.listdir(".") \
]' "$1" "$2"
}
Et appelez comme
rename_photos arg1 arg2
En supposant que votre nommage est cohérent, ce que cela fait est de séparer le nom de fichier en parties à "." et "_" et de les renommer via os.rename
fonction
Par exemple :
$ ls
file_001.jpeg file_002.jpeg file_003.jpeg
$ rename_photos birthday 2016
$ ls
photo_birthday_2016_001.jpeg photo_birthday_2016_002.jpeg photo_birthday_2016_003.jpeg
Version du script
Sans le rendre trop complexe, voici un petit script qui fait la même fonction. Il y a beaucoup de commentaires pour expliquer ce que fait chaque partie. Le script lui-même doit être stocké dans l'un des répertoires qui font partie de votre répertoire $PATH
par exemple dans votre ~/bin
dossier. Sinon, il exécute exactement la même fonction (en plus d'imprimer les nouveaux noms de fichiers).
#!/usr/bin/env python
import os
import re
import sys
# The operates on all files in the current working
# directory, so you would have to cd to your folder
# and run script there.
for item in os.listdir("."):
# We don't wanna rename the script itself ( just in case ) and
# we don't
if os.path.join("./" + item) != __file__ and \
os.path.isfile("./" + item):
title="photo_"
# Old name can be split into parts using _ and . as
# separators, so we only take items between those as one.
# The last item (-1) is extension, and the one
# before extension is number
old_name = re.split("[_.]",item)
new_name = sys.argv[1] + sys.argv[2] + "_" \
+ old_name[-2] + "." + old_name[-1]
print(new_name)
os.rename(item,new_name)