for i in $(ls *.txt); do
mv "$i" "$(basename $i .txt)".log
done
Richtig:
CODE:
for i in *.txt; do
mv "$i" "${i%.txt}.log"
done
Und warum? Erstens funktioniert die Schleife in Variante eins nicht, wenn die Dateinamen Leerzeichen enthalten (ohne Anführungszeichen), und zweitens ist der Aufruf von „basename” wieder nur ein überflüssiger fork(2).
Sollte soviel morgendliches Denken Euch total hibbelig gemacht haben, so wird es jetzt Zeit für ein bißchen Yoga: