Der basename-Befehl in Linux gibt die letzte Komponente in einem Dateipfad aus. Dies ist besonders hilfreich in Bash-Skripten, bei denen Sie den Dateinamen aus dem langen Dateipfad extrahieren möchten.
Lassen Sie es mich Ihnen anhand einiger Beispiele zeigen.
Basename-Befehl
Der basename-Befehl hat zwei Arten von Syntax. Der erste beinhaltet ein Suffix:
basename PATH [suffix]
Mit der zweiten können Sie Optionen hinzufügen:
basename OPTION PATH
Sie können die Optionen nicht mit Suffix kombinieren. Lassen Sie sich noch nicht verwirren. Folgen Sie den Beispielen und Sie werden verstehen, was ich sagen möchte.
Die Verwendung des basename-Befehls mit einem Dateipfad ergibt den Dateinamen:
basename /home/user/data/filename.txt
filename.txt
Der basename-Befehl ist eigentlich ziemlich dumm. Es erkennt den Dateipfad nicht wirklich. Es sucht nur nach den Schrägstrichen (/) und gibt das aus, was nach dem letzten Schrägstrich steht.
Wenn ich beispielsweise das obige Beispiel durch Entfernen des Dateinamens ausführe, wird Folgendes ausgegeben.
basename /home/user/data
data
Dateierweiterung mit Suffix entfernen
Der Hauptzweck des Bash-Befehls besteht darin, den Dateinamen aus dem Dateipfad zu extrahieren. Sie können die Dateierweiterung auch entfernen, während Sie den Dateinamen extrahieren.
Erwähnen Sie einfach, was Sie am Ende der Ausgabe entfernen möchten. Nehmen wir also an, Sie möchten die .txt-Datei aus filename.txt entfernen. Fügen Sie es einfach am Ende des basename-Befehls hinzu:
basename /home/user/data/filename.txt .txt
filename
Sie können auch die Option -s für das Suffix verwenden:
basename -s .txt /home/user/data/filename.txt
filename
Das Suffix wird am Ende der letzten Komponente der Eingabe entfernt. Es findet die Erweiterung der Datei nicht wirklich heraus. Wenn Sie txt (ohne Punkt) anstelle von .txt angeben, erhalten Sie „Dateiname.“ (mit dem Punkt am Ende).
Auch wenn Sie ein Suffix angeben, das nicht am Ende der Komponente steht, bleibt die Ausgabe so, als wäre kein Suffix vorhanden.
basename /home/user/data/filename.txt name
filename.txt
Basisnamen mit mehreren Pfaden verwenden
Mit der Option -a
, können Sie mehrere Pfade gleichzeitig verwenden.
basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt
Sie können die Suffix-Option -s
verwenden mit -a
aber mit einigen Einschränkungen. Sie können allen Dateipfaden nur ein Suffix zuweisen.
basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2
Sie können keine individuellen Suffizien zuweisen. Es wird nicht funktionieren.
Sie können die Ausgabe auch mit NULL anstelle des Zeilenumbruchs mit -z
trennen Option.
Basisnamen in Bash-Skript verwenden
Ich habe einige Beispiele für den basename-Befehl gezeigt. Sehen wir uns ein paar Beispiele für Basisnamen in Bash-Skripten an.
Angenommen, Sie haben eine Dateipfadvariable und möchten den Dateinamen aus dem Pfad in einer Variablen speichern. Dies könnte ein einfaches Skript sein:
pathname="/home/dir/data/filename"
result=$(basename "$pathname")
echo $result
Ein weiteres Beispiel ist, wo Sie die Dateierweiterungen umbenennen möchten. Natürlich können Sie den rename-Befehl verwenden, um Dateien stapelweise umzubenennen, aber dies ist nur ein Beispiel.
Also habe ich dieses Beispielskript geschrieben, um die Dateierweiterungen zu ersetzen:
for file in *$1; do
if [ -f $file ]; then
mv $file `basename $file .$1`.$2
fi
done
Ist Ihnen aufgefallen, dass ich im Bash-Skript überprüft habe, ob es sich um eine Datei handelt oder nicht, damit ein übereinstimmendes Verzeichnis nicht geändert wird?
Sie können das obige Skript wie folgt verwenden:
./myscript.sh html htm
Und es wird alle Dateien im aktuellen Verzeichnis mit html am Ende in htm umbenennen.
Dies waren nur einige Beispiele. Sie können es gemäß Ihren Anforderungen verwenden.
Der basename-Befehl wird durch den dirname-Befehl ergänzt. Im Gegensatz zu basename gibt der dirname-Befehl den gesamten Pfad außer der letzten Komponente aus.
Ich hoffe, Ihnen hat dieses Tutorial gefallen. Fühlen Sie sich wie immer frei, Fragen zu stellen oder Vorschläge im Kommentarbereich zu machen.