Ich wollte alle .sh-Erweiterungen löschen.
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Es funktioniert jedoch nicht, sondern basename
gibt 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`'
-i
Option 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.