Entfernen Sie eine Dateierweiterung in Bash unter Berücksichtigung der Groß-/Kleinschreibung

Entfernen Sie eine Dateierweiterung in Bash unter Berücksichtigung der Groß-/Kleinschreibung

Ich möchte das Suffix einer Datei mithilfe basenameeines Bash-Skripts entfernen. Der Befehl entfernt das Suffix allerdings nur unter Beachtung der Groß- und Kleinschreibung.

Wie kann ich eine Erweiterung ohne Berücksichtigung der Groß-/Kleinschreibung entfernen?

Antwort1

Wenn Sie eine Erweiterung in Bash entfernen möchten, können Sie dies ohne externe Tools tun. Übergeben Sie sie dann an basename:

$ f=/path/to/some/file.foo.bar
$ basename "${f%.*}"
file.foo

Mit einer Erweiterung in gemischter Groß- und Kleinschreibung:

$ f=/path/to/some/file.foo.Bar
$ basename "${f%.*}"
file.foo

Hier %istZeichenfolgenmanipulation. Es wird die kürzeste passende Teilzeichenfolge von dem entfernt, was in steht f. Das .*entspricht einem Punkt und null oder mehr Zeichen, unabhängig von der Groß-/Kleinschreibung.

Antwort2

Verwenden der Parametererweiterung

file=/home/johndoe/cv.DOC
basename ${file%.[Dd][Oo][Cc]}

verwandte Informationen