Introductie
Er zijn veel redenen waarom u de bestandsnaam en extensie van een bestand in Bash wilt extraheren:
-
Om de bestandsnaam of extensie te manipuleren โ Mogelijk wilt u de bestandsnaam of extensie extraheren om deze te wijzigen, bijvoorbeeld door een voor- of achtervoegsel aan de bestandsnaam toe te voegen, of de bestandsextensie te wijzigen.
-
Om een โโbestand met een unieke naam te maken โ Mogelijk wilt u de bestandsnaam en extensie extraheren om een โโnieuw bestand met een unieke naam te maken, bijvoorbeeld door een tijdstempel of een willekeurig getal aan de bestandsnaam toe te voegen.
-
Om de bestandsnaam of extensie in een script of opdracht te gebruiken โ Mogelijk wilt u de bestandsnaam of extensie extraheren om deze te gebruiken als argument of invoer voor een script of opdracht, bijvoorbeeld om deze door te geven aan een programma of om een โโbestand te maken met dezelfde naam als een map.
-
Om informatie uit de bestandsnaam of extensie te extraheren โ Mogelijk wilt u de bestandsnaam of extensie extraheren om er informatie uit te halen, zoals de datum of het bestandstype.
In dit artikel bekijken we de drie meest voorkomende manieren waarop u de bestandsnaam en bestandsextensie in Bash kunt extraheren. We zullen ze allemaal bekijken en u de voor- en nadelen geven, zodat u een weloverwogen beslissing kunt nemen over welke aanpak het beste bij u past.
Methode 1: Gebruik de basisnaam commando
De basename
commando kan worden gebruikt om de bestandsnaam en extensie uit een bestandspad te extraheren:
filename=$(basename /path/to/file.txt)
echo $filename
Hoewel deze methode vrij eenvoudig en gemakkelijk te gebruiken is, kunnen we helaas op geen enkele manier alleen de bestandsnaam (zonder extensie) extraheren zonder enige nabewerking.
U kunt ook gebruik maken van de dirname
opdracht om het mappad afzonderlijk uit te pakken:
directory=$(dirname /path/to/file.txt)
echo $directory
Voors:
- Eenvoudig te gebruiken
- Verwerkt bestandsnamen met spaties correct
nadelen:
- Extraheert alleen de bestandsnaam en kan de extensie niet afzonderlijk extraheren zonder aanvullende verwerking
Methode 2: Parameteruitbreiding gebruiken
Bash biedt een functie genaamd parameteruitbreiding, waarmee u delen van een variabele kunt extraheren met een speciale syntaxis. U kunt bijvoorbeeld de volgende syntaxis gebruiken om de bestandsnaam en extensie te extraheren uit een bestandspad dat is opgeslagen in een variabele:
filepath="/path/to/file.txt"
filename=${filepath##*/}
echo $filename
U kunt parameteruitbreiding ook gebruiken om de extensie afzonderlijk te extraheren:
extension=${filename##*.}
echo $extension
Voors:
- Flexibel
- Kan zowel de bestandsnaam als de extensie afzonderlijk extraheren,
- Verwerkt bestandsnamen met spaties correct
nadelen:
- Vereist een variabele om het bestandspad op te slaan
Methode 3: Gebruik de awk commando
De awk
command is een krachtig tekstverwerkingshulpmiddel dat kan worden gebruikt om delen van een tekenreeks te extraheren. U kunt bijvoorbeeld de volgende syntaxis gebruiken om de bestandsnaam en extensie uit een bestandspad te extraheren:
filepath="/path/to/file.txt"
filename=$(echo $filepath | awk -F/ '{print $NF}')
echo $filename
Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!
U kunt ook gebruik maken van awk
om de extensie afzonderlijk uit te pakken:
extension=$(echo $filename | awk -F. '{print $NF}')
echo $extension
Voors:
- krachtig
- Kan zowel de bestandsnaam als de extensie afzonderlijk extraheren
- Verwerkt bestandsnamen met spaties correct
nadelen:
- Syntaxis kan voor sommige gebruikers onbekend zijn
- Vereist dat het bestandspad er doorheen wordt geleid
awk
Conclusie
Over het algemeen kan het extraheren van de bestandsnaam en extensie van een bestand in Bash een nuttige techniek zijn voor het werken met bestanden en het uitvoeren van verschillende taken in de Bash-shell.
Elk van de genoemde methoden heeft zijn eigen voor- en nadelen, en de beste keuze zal afhangen van uw specifieke behoeften en voorkeuren. Het is vaak handig om bekend te zijn met meerdere benaderingen, zodat u degene kunt kiezen die het meest geschikt is voor uw situatie.