Pak de bestandsnaam en extensie uit in Bash

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.

Tijdstempel:

Meer van Stapelmisbruik