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 null0
wird, was bedeuten würde, dass keine Argumente angegeben wurden; in diesem Fall würden wirpwd
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 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 loop
und die Variable$allFile
verwenden. Denken Sie daran, dass$allFile
den Wertls $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
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.