Direto do Greg's Wiki :
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
Veja também a entrada sobre por que você não deve analisar ls .
Editar: se você tiver que usar basename , sua sintaxe seria:
for f in *.txt; do
mv -- "$f" "$(basename -- "$f" .txt).text"
done