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