Alternativa python ligeiramente longa mas utilizável. Supondo que sua nomenclatura seja consistente com o que você tem no exemplo, você poderia usar essa função em ~/.bashrc
. (Lembre-se dos caracteres "\". Não deve haver espaço depois disso, somente nova linha)
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"
}
E chame como
rename_photos arg1 arg2
Supondo que sua nomenclatura seja consistente, o que isso faz é dividir o nome do arquivo em partes em "." e "_" e renomeia-os via os.rename
function
Por exemplo:
$ 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
Versão do script
Sem torná-lo excessivamente complexo, aqui está um pequeno script que faz a mesma função. Há muitos comentários para explicar o que cada parte faz. O script em si deve ser armazenado em um dos diretórios que pertencem à sua variável $PATH
, por exemplo, na sua pasta ~/bin
. Caso contrário, ele executa exatamente a mesma função (além de imprimir novos nomes de arquivos)
#!/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)