bash/zsh: Dateinamenserweiterung entfernen

English Deutsch

Problem:

Du hast einen Dateinamen in der Linux-Shell und möchtest die Dateinamenserweiterung entfernen – z.B. wenn du myarchive.zip hast, möchtest du als Ausgabe nur myarchive erhalten.

Lösung

Nehmen wir an, dein ursprünglicher Dateiname ist in der Bash-Variable $filename gespeichert. Dann kannst du den folgenden Befehl verwenden:

stripext.sh
echo $filename | rev | cut -d. -f2- | rev

Warum das funktioniert:

Wir müssen diese Kombination aus cut und rev verwenden, weil cut etwas wie „Nur das letzte Feld entfernen“ nicht unterstützt, es sei denn, man kennt die Anzahl der Felder (was man im Allgemeinen nicht tut, es sei denn, man möchte keine Dateinamen wie my.archive.zip unterstützen).

rev kehrt den Dateinamen um – z.B. wenn $filename myarchive.zip ist, ergibt rev $filename piz.evihcraym cut -d. -f2 entfernt nur das erste Feld aus dem Eingabe-String, getrennt durch „.“ – da der String umgekehrt ist, entspricht dies dem Entfernen nur des letzten Felds aus der ursprünglichen Eingabe

Danach müssen wir die Ausgabe von cut erneut _rev_ersen, um das gewünschte Ergebnis zu erhalten


Check out similar posts by category: Shell