basenavn og dirname: to kommandoer du bør vite

terminal shell Linux-kommandoer

Noen ganger er noen veiledninger rettet mot å forklare noe mer eksotiske og rare kommandoer. På den annen side er det noen som inkluderer seriedistribusjoner og ikke er like populære som cd, ls, cat, etc., men de er like praktiske. I denne opplæringen vil jeg vise deg hva som kan gjøres med to av disse kommandoene: basenavn og fortell meg.

Kanskje a priori virker de absurde for deg og at de ikke har noe nytte, men de har ganske praktiske bruksområder i noen tilfeller, for eksempel i skript der det er nødvendig å trekke ut en del av en bane, for eksempel navnet på filen eller katalogen, slik at en annen kommando fungerer på dette ...

Hva er de for

Disse kommandoene er veldig grunnleggende, og dens funksjoner er:

  • basenavn: brukes til å trekke ut navnet på filen fra en bane.
  • Fortell meg: brukes til å trekke ut katalognavnet fra en bane.

Eksempler på bruk

Her kan du se noen eksempler hvordan du bruker dem:

  • For eksempel å bruke basenavn med / etc / passwd, og at den returnerer navnet på filen i utdataene, i dette tilfellet passwd:
basename /etc/passwd

  • Du kan også spesifisere en utvidelse slik at den gir deg navnet på filen uten utvidelsen. Anta for eksempel at du ønsket å trekke ut navnet på et bilde /home/media/test.jpg uten jpg-utvidelsen (det ville returnere prueba):
basename -s .jpg /home/media/prueba.jpg

  • Du kan til og med behandle flere ruter samtidig separat, for dette må du bruke alternativet -a:
basename -a /etc/passwd /var/log/boot.log

  • For å gjøre det motsatte, og gi deg navnet på katalogen, uten navnet på filen, må du bruke Fortell meg. Hvis du for eksempel vil bruke den i banen /var/spool/mail/test.txt og vil ha den tilbake / var / spool / mail, bruk deretter:
dirname /var/spool/mail/prueba.txt

Når det gjelder en verktøy i et skript, her har du et annet eksempel. Tenk deg at du har et enkelt skript, og at det er en bane som er variabel. Men du vil at den skal vise katalogen som inneholder en fil, uansett fil, i så fall kan du ha noe sånt som:

pathname="/home/usuario/data/fichero"

result=$(dirname "$pathname")

echo $result

I dette skriptet vil "banenavnet" alltid være den samme statiske deklarert av konstanten i begynnelsen, men det kan være tilfeller der det ikke er, og det er der det blir praktisk. For eksempel:

/*script para convertir una imagen gif en png*/

#!/bin/sh
for file in *.gif;do
    #Salir si no hay ficheros
    if [! -f $file];then
        exit
    fi
    b='basename $file .gif'
    echo NOW $b.gif is $b.png
    giftopnm $b.gif | pnmtopng >$b.png
done


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: AB Internet Networks 2008 SL
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Gregory ros sa

    Et godt eksempel på de tingene som du ser ubrukelig når du lærer, men når du kommer til emnet, ser du hvor praktisk de er.