Dateiname und Erweiterung ermitteln mit Bash
- Dateiname und Erweiterung mit Bash ermitteln
- Ausführen der Bash-Datei zum Abrufen von Dateinamen und -erweiterungen
- Berechtigungsbezogene Probleme
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 null0wird, was bedeuten würde, dass keine Argumente angegeben wurden; in diesem Fall würden wirpwdoder 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
allFilemit dem einfachen Befehlls, 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 loopund die Variable$allFileverwenden. Denken Sie daran, dass$allFileden Wertls $cDirhat.
# 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
echoaus.
# 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
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.