Ich wollte alle .sh-Erweiterungen löschen.
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Es funktioniert jedoch nicht, sondern basenamegibt einen unveränderten Dateinamen zurück.
Warum verhält es sich so?
Das funktioniert zum Beispiel:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
EDIT :
Lösung: Ein einfaches Anführungszeichen verhindert die `basename ...`Auswertung durch die Shell, bevor der Befehl ausgeführt wird.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-iOption eingestellt, aber diese "klassischen" Optionen sind veraltet. Um beispielsweise nur eine Option / Zeile zu verwenden, empfiehlt die neue POSIX-Manpage-L1. Um das alte Verhalten von aufzurufen-i, empfiehlt die Seite die-I'{}'Option.