GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden des Linux-Basisnamenbefehls in Bash-Skripten

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.


Linux
  1. Linux-Tail-Befehl

  2. Verwenden des Linux-Sleep-Befehls in Bash-Skripten

  3. Linux-wc-Befehl

  4. Linux grep-Befehl

  5. So teilen Sie ISO oder Datei mit dem Befehl „Split“ in Linux

Verlaufsbefehl in Linux (Bash-Verlauf)

Basisname-Befehl unter Linux

Verwenden des Cat-Befehls unter Linux mit Beispielen

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

Verwenden des Watch-Befehls unter Linux

Verwenden des Linux-Dirname-Befehls in Bash-Skripten