basename и dirname: две команди, които трябва да знаете

терминална обвивка Linux команди

Понякога някои уроци имат за цел да обяснят малко по-екзотични и странни команди, от друга страна, има такива, които включват серийни дистрибуции и не са толкова популярни като cd, ls, cat и т.н., но са също толкова практични. В този урок ще ви покажа какво може да се направи с две от тези команди: basename и ми кажете.

Може би априори ви се струват абсурдни и че нямат полза, но имат доста практични приложения в някои случаи, като например в скриптове, където трябва да извлечете част от пътя, като името на файла или директорията, така че друга команда да работи върху това ...

За какво са те

Тези команди са много основни и неговите функции звук:

  • базово име: използва се за извличане на името на файла от път.
  • кажи ми: използва се за извличане на името на директорията от път.

Примери за използване

Тук можете да видите някои примери как да ги използвам:

  • Например да се използва базово име с / etc / passwd и че връща името на файла в изхода си, в този случай passwd:
basename /etc/passwd

  • Можете също да посочите удължаване така че да ви дава името на файла без разширението. Например, да предположим, че искате да извлечете името на изображение /home/media/test.jpg без разширението jpg (ще се върне prueba):
basename -s .jpg /home/media/prueba.jpg

  • Можете дори обработвайте няколко маршрута наведнъж отделно, за това трябва да използвате опцията -a:
basename -a /etc/passwd /var/log/boot.log

  • За да направите обратното и да ви даде името на директорията, без името на файла, тогава трябва да използвате кажи ми. Например, ако искате да го използвате в пътя /var/spool/mail/test.txt и да го върнете / var / spool / mail, тогава използвайте:
dirname /var/spool/mail/prueba.txt

Що се отнася до a полезност в скрипт, ето ви още един пример. Представете си, че имате прост скрипт и че в него има път, който е променлив. Но вие искате да показва директорията, която съдържа файл, независимо от файла, в този случай може да имате нещо като:

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

result=$(dirname "$pathname")

echo $result

Очевидно в този скрипт "pathname" винаги ще бъде една и съща статика, декларирана от константата в началото, но може да има случаи, в които не е и именно там става практично, Например:

/*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


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорник за данните: AB Internet Networks 2008 SL
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Грегорио рос каза той

    Добър пример за онези неща, които когато учиш, виждаш безполезни, но когато стигнеш до темата, виждаш колко са практични.