Dateiname und Erweiterung ermitteln mit Bash

Ozair Malik 30 Januar 2023
  1. Dateiname und Erweiterung mit Bash ermitteln
  2. Ausführen der Bash-Datei zum Abrufen von Dateinamen und -erweiterungen
  3. Berechtigungsbezogene Probleme
Dateiname und Erweiterung ermitteln mit Bash

Bash-Scripting wird in den letzten Jahren immer beliebter, sei es für Ihre tägliche Linux-Administrationsaufgabe oder eine komplette DevOps-Automatisierungsaufgabe.

Angenommen, Sie befinden sich in einer Situation, in der Sie einen Dateinamen und seine Erweiterung separat in einem Bash-Skript extrahieren möchten. Zum Beispiel gibt es eine Python-Datei mit dem Namen server.py. Wir wollen diesen String in zwei Teile aufteilen, indem wir den Namen server und die Erweiterung py trennen.

Dateiname und Erweiterung mit Bash ermitteln

Wir haben zu Demonstrationszwecken ein Bash-Skript geschrieben. Sie können diesen Code überall in Ihrem Skript verwenden, wenn Sie möchten.

  • Zuerst prüfen wir, ob der Benutzer die richtigen Argumente angegeben hat oder nicht. Der folgende Codeausschnitt verwendet eine if-Anweisung, die gleich = zu null 0 wird, was bedeuten würde, dass keine Argumente angegeben wurden; in diesem Fall würden wir pwd oder unser aktuelles Arbeitsverzeichnis als Standardargument verwenden.
#!/bin/bash

# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
    cDir=$(pwd) # Setting the cDir variable to current directory
    echo "[-] No directory provided!"
else
    cDir=$1

fi
echo "[+] Setting the directory to $cDir"
  • Als nächstes prüfen wir, ob das vom Benutzer angegebene Verzeichnis existiert oder nicht. Wenn es nicht existiert, verlassen wir das script.e
# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
    echo "[-] Directory $cDir doesn't exist!"
    exit
fi
  • Jetzt beginnen wir mit dem Extrahieren der im Verzeichnis verfügbaren Dateien (natürlich wenn es gültig ist) in der Variablen allFile mit dem einfachen Befehl ls, der sowohl unter Linux als auch PowerShell in Windows-Betriebssystemen ausgeführt wird.
# Main extraction:
allFile=`ls $cDir`
echo;
  • Hier prüfen wir, ob der letzte Wert des angegebenen Pfades nicht / ist, und fügen ihn andernfalls am Ende hinzu, um Fehler zu vermeiden.
# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
    cDir+='/'
fi
  • Als nächstes iterieren wir über alles, was im Ordner vorhanden ist, indem wir for loop und die Variable $allFile verwenden. Denken Sie daran, dass $allFile den Wert ls $cDir hat.
# Iterating over everything in the folder
for item in $allFile; do
    # Appending path to each file:
    item="$cDir$item"

Wir überprüfen, ob die erkannte Datei vom Typ file ist, indem wir das Flag -f in der Schleife verwenden. Wenn dies der Fall ist, entfernen wir den Punktteil aus dem Dateinamen – zum Beispiel den Erweiterungsteil.

  • Am Ende drucken wir die Ergebnisse in unserer gewünschten Weise mit echo aus.
# Checking if current item is a file:
if [[ -f $item ]]; then
	ext=`ls $item | rev | cut -d '.' -f 1 | rev`
	file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
	echo "File Name: $file_name -> Extension: $ext"
fi
  • Dieses Skript prüft, ob ein bestimmtes Verzeichnis existiert oder nicht. Und wenn das Verzeichnis existiert, werden alle Dateien zusammen mit ihrer Erweiterung aufgeführt.
┌─[root@parrot][/home/user/Downloads]
└──╼ #./test2.sh
[-] No directory provided!
[+] Setting the directory to /home/user/Downloads

File Name: /home/user/Downloads/ExtraCredit_Sockets_Intro -> Extension: pdf
File Name: /home/user/Downloads/project -> Extension: sh
File Name: /home/user/Downloads/test2 -> Extension: sh
File Name: /home/user/Downloads/test -> Extension: txt
Hinweis
Wir führen das Skript ohne Angabe eines Verzeichnisses als Argument aus, daher betrachtet es Downloads, d. h. mein aktuelles Verzeichnis, als Standard und erwähnt alle Dateinamen und deren Erweiterungen, die in diesem Verzeichnis vorhanden sind.

Jede Zeile des Codes wird kommentiert, sodass Sie ihn bei Unklarheiten überprüfen können.

Wenn Sie das Skript verwenden möchten, finden Sie hier die Vollversion.

#!/bin/bash

# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
	cDir=$(pwd) # Setting the cDir variable to current directory
	echo "[-] No directory provided!"
else
	cDir=$1
fi
echo "[+] Setting the directory to $cDir"

# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
	echo "[-] Directory $cDir doesn't exist!"
	exit
fi

# Main extraction:
allFile=`ls $cDir`
echo;

# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
	cDir+='/'
fi

# Iterating over everything in the folder
for item in $allFile; do
	# Appending path to each file:
	item="$cDir$item"
	# Checking if current item is a file:
	if [[ -f $item ]]; then
		ext=`ls $item | rev | cut -d '.' -f 1 | rev`
		file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
		echo "File Name: $file_name -> Extension: $ext"
	fi
done

Ausführen der Bash-Datei zum Abrufen von Dateinamen und -erweiterungen

Falls Sie ein Neuling sind, der versucht, Bash zu lernen, und nicht wissen, wie man läuft, verwenden Sie diesen Code; Alles, was Sie tun müssen, ist eine Datei mit der Erweiterung .sh zu erstellen, was bedeutet, dass es sich um eine Bash-Datei handelt.

Navigieren Sie danach mit dem Terminal Ihrer Wahl zu diesem Verzeichnis und geben Sie ./filename ein, wodurch die Datei ausgeführt werden soll.

Wenn Sie ein Windows-Betriebssystem verwenden, geben Sie bash file.sh ein, und es sollte ohne Probleme laufen.

Denken Sie daran, den richtigen Dateinamen des Skripts in Ihrem Fall zu verwenden.

Berechtigungsbezogene Probleme

Hinweis: Während der Ausführung des Skripts kann der Fehler Permission Denied auftreten.

Sie müssen die richtigen Berechtigungen mit chmod +x [Dateiname] im Terminal bereitstellen.

Führen Sie die PowerShell oder die Eingabeaufforderung als Administrator aus, wenn Sie Windows verwenden, um berechtigungsbezogene Probleme zu vermeiden.

Verwandter Artikel - Bash File