Nur um einen weiteren Vorschlag hinzuzufügen, auch wenn er nicht den Ersetzungsmechanismus der Shell, sondern den von sed verwendet.
find -name '*.mp3' -print |
sed -e 's/\.mp3$//' -e "s/.*/mv '&\.mp3' '&\.txt'/" |
sh
Mit anderen Worten: Erstellen Sie eine mv
Befehlszeile für jeden Dateinamen, und übergeben Sie das Ergebnis an sh
.
Dies schlägt fehl, wenn eine der Dateien ein Apostroph (einfaches Anführungszeichen) in ihrem Dateinamen enthält. Ich schreibe dies hauptsächlich, um dem "Wenn man nur xargs hat, sieht jedes Problem wie ein Nagel aus"-Syndrom entgegenzuwirken.
Nicht alleeds haben genau die gleiche Syntax. Insbesondere bin ich mir nicht 100%ig sicher, ob man unter einem alten SunOS mehrere -e Argumente haben kann (suchen Sie nach dem XPG-kompatiblen sed in etwas wie /usr/ucb/blah/barf/vomit/xpg4/bin/sed
)