Lees bestandsnaam zonder extensie in Bash

Read Filename Without Extension Bash



Linux-gebruikers moeten voor veel doeleinden regelmatig met bestanden werken. Soms hoeven de gebruikers de basisnaam van het bestand alleen te lezen door de bestandsextensie te verwijderen. Bestandsnaam en extensie kunnen op verschillende manieren worden gescheiden en opgeslagen op verschillende variabelen in Linux. Bash ingebouwde opdracht en shell-parameteruitbreiding kunnen worden gebruikt om de extensie van het bestand te verwijderen. Hoe de bestandsnaam zonder extensie kan worden gelezen met behulp van de hierboven genoemde manieren, wordt in deze tutorial uitgelegd.

Het commando `basename` gebruiken om de bestandsnaam te lezen

Het commando `basename` wordt gebruikt om de bestandsnaam zonder extensie uit een map of bestandspad te lezen.







Syntaxis:



basisnaamNAAM[ACHTERVOEGSEL]

of



basisnaamOPTIE... NAAM...

Hier kan NAME de bestandsnaam of bestandsnaam met het volledige pad bevatten. SUFFIX is optioneel en bevat de bestandsextensie die de gebruiker wil verwijderen. Het commando `basename` heeft enkele opties die hieronder worden beschreven.





Opties

Naam Beschrijving
-tot Het wordt gebruikt om meerdere bestandsnamen met pad of zonder pad door te geven als opdrachtargumenten.
-s Het wordt gebruikt om de extensie door te geven als achtervoegsel dat moet worden verwijderd.
-Met Het wordt gebruikt om de meerdere bestandsnamen weer te geven door elk bestand te scheiden met null.
-helpen Het wordt gebruikt om de informatie weer te geven van het gebruik van de opdracht `basename`.
-versie Het wordt gebruikt om de versie-informatie weer te geven.

Voorbeeld-1: NAAM en SUFFIX gebruiken

Het volgende `basename` commando zal de bestandsnaam met extensie ophalen. SUFFIX wordt weggelaten uit deze opdracht. Hier is de uitvoer: ‘product.txt’ .



$basisnaam /huis/fahmida/code/product.txt

Als je de bestandsnaam wilt ophalen zonder extensie, dan moet je de bestandsextensie als SUFFIX opgeven met het commando `basename`. Hier is de extensie .txt. Voer de volgende opdracht uit om de extensie uit het bestand te verwijderen.

$basisnaam /huis/fahmida/code/product.txt .txt

Voorbeeld-2: Gebruik de optie '-a' en NAME

Het gebruik van de optie '-a' van de opdracht 'basename' wordt in dit voorbeeld getoond. Hier worden twee bestandspaden als argumenten doorgegeven met de opdracht `basename`. Elke bestandsnaam met extensie wordt opgehaald uit het pad en afgedrukt per nieuwe regel.

$basisnaam -tot /huis/fahmida/index.html/huis/fahmida/code/emp.txt

Voorbeeld-3: Gebruik de optie '-z' en NAME

De optie '-z' wordt gebruikt met de opdracht 'basename' om de meerdere bestandsnamen af ​​te drukken met een null-waarde in plaats van een nieuwe regel. De volgende opdracht gebruikt twee opties samen, '-a' en '-z'. Hier, twee bestandsnamen, index.html en emp.txt wordt afgedrukt zonder spatie of nieuwe regel.

$basisnaam -de /huis/fahmida/index.html/huis/fahmida/code/emp.txt

Voorbeeld-4: De optie '-s' en NAAM gebruiken

Het volgende commando kan gebruikt worden als alternatief voor SUFFIX met `basename`. Bestandsextensie moet de optie '-sh' doorgeven om de bestandsextensie uit het bestand te verwijderen. In het volgende voorbeeld wordt de extensie '-sh' uit het bestand 'addition.sh' verwijderd.

$basisnaam -s.sh toevoeging.sh

Voorbeeld-5: Bestandsextensie verwijderen zonder SUFFIX

Als u de extensie niet weet van het bestand dat u uit de bestandsnaam wilt verwijderen, dan zal dit voorbeeld u helpen het probleem op te lossen. Maak een bestand met de naam read_file.sh met de volgende code om de bestandsnaam van een extensie op te halen. Het `sed` commando wordt in dit voorbeeld gebruikt om elk type extensie uit de bestandsnaam te verwijderen. Als u het script uitvoert, is de uitvoer ' gemiddeld ’ na het verwijderen van de extensie ‘ py '.

read_file.sh

#!/bin/bash
# Stel de bestandsnaam in met pad
bestandsnaam='/home/fahmida/code/gemiddelde.py'
# Lees de bestandsnaam zonder extensie met behulp van 'basname' en `sed` commando
gooide uit '$(basisnaam '$bestandsnaam' | sed 's/(.*)..*/1/')'

Voer het script uit.

$bashread_file.sh

Voorbeeld-6: bestandsextensie converteren van txt naar docx

Bestandsnaam zonder extensie moet het bestand van de ene extensie naar de andere converteren. Dit voorbeeld laat zien hoe je de extensie van alle tekstbestanden (.txt) kunt veranderen in de woordbestanden (.docx) door het commando `basename` in het bash-script te gebruiken. Maak een bestand met de naam, convert_file.sh met de volgende code. Hier wordt een for-in-lus gebruikt om alle tekstbestanden te lezen met .tekst extensie uit de huidige map. De bestandsnaam zonder extensie wordt gelezen door het commando `basename` en hernoemd door de .docx-extensie toe te voegen in elke iteratie van de lus.

convert_file.sh

#!/bin/bash
# de lus leest elk tekstbestand uit de huidige map
voorbestandsnaamin ``ls *.tekst``
doen
# Druk de tekstbestandsnaam af vóór de conversie
gooide uit 'Bestandsnaam voor conversie:$bestandsnaam'
# Verander de extensie van het bestand txt naar docx
mv - '$bestandsnaam' '$(basisnaam -- '$bestandsnaam' .txt).docx '
gedaan

Voer het script uit.

$bashconvert_file.sh

Controleer of de tekstbestanden al dan niet zijn geconverteerd door het commando `ls` te gebruiken.

$ls

Voorbeeld-7: Lees bestandsnaam zonder extensie met Shell parameteruitbreiding

Shell-parameteruitbreiding is een andere manier om de bestandsnaam zonder extensie in bash te lezen. Dit voorbeeld toont het gebruik van shell-parameteruitbreiding. De volgende opdracht slaat de bestandspadnaam op in de variabele $ bestandsnaam .

$bestandsnaam='/var/usr/temp/mijnbestand.tar.gz'

De volgende opdracht verwijdert alle soorten extensies van het pad en slaat het bestandspad zonder extensie op in de variabele, $bestand1 .

$bestand1='${bestandsnaam%%.*}'

Met de volgende opdracht wordt de bestandsnaam alleen vanaf het pad afgedrukt. Hier zal de uitvoer ' mijn bestand '.

$gooide uit '${file1##*/}'

Als de bestandsnaam twee extensies met twee punten (.) bevat en u wilt de bestandsnaam lezen door de laatste extensie van het bestand te verwijderen, dan moet u de volgende opdracht gebruiken. Voer de volgende opdracht uit die het bestandspad in de variabele opslaat, $ bestand2 door de laatste extensie van het bestand te verwijderen.

$bestand2='${bestandsnaam%.*}'

Voer nu de volgende opdracht uit om de bestandsnaam af te drukken met de extensie één punt (.). Hier zal de uitvoer zijn: mijnbestand.tar.

$gooide uit '$ {bestand2 ## * /}'

Conclusie

Bestandsnaam zonder extensie is vereist voor verschillende doeleinden. Sommige toepassingen van bestandsnaam zonder extensie worden in deze zelfstudie uitgelegd aan de hand van enkele voorbeelden, zoals bestandsconversie. Deze zelfstudie helpt gebruikers die geïnteresseerd zijn om de manieren te leren om de bestandsnaam en extensie van het bestandspad te scheiden. Hier worden twee manieren uitgelegd. De gebruiker kan elk van deze manieren volgen om de bestandsnaam alleen uit het bestandspad te extraheren.