Використання базового імені Command у Bash-скриптах

У скриптах Bash однією з найпоширеніших задач є маніпулювання шляхами до файлів – особливо, коли вам потрібно витягти лише ім’я файлу з повного шляху. Саме для цього і потрібна команда basename. Незважаючи на те, що basename здається простою, вона має потужні можливості при правильному використанні в більш складних скриптах, інструментах автоматизації, хостингових сервісах і середовищах CI/CD.

Що таке basename?

Команда basename вилучає шлях до каталогу і, за бажанням, вилучає розширення файлу, залишаючи лише основну назву (останній компонент шляху до файлу).

🔧 Базовий синтаксис:

basename [path] [suffix]

✅ Прості приклади:

basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf

Навіщо використовувати базове ім’я в скриптах?

Ось лише кілька прикладів реальних потреб скриптів:

  • Ведення журналів: Витягнути ім’я оброблюваного файлу журналу.

  • Архівація: Додати до стисненого архіву лише ім’я файлу.

  • Автоматизація: Обробляти пакети файлів і генерувати імена вихідних файлів.

  • Конвеєри: Витягувати імена файлів з кроками CI/CD.

Практичні приклади використання Bash-скриптів

📁 1. Циклічний перегляд файлів з логуванням

for file in /var/log/*.log; do
name=$(basename "$file" .log)
echo "Processing $name"
# Add further commands like gzip "$file" or tail -n 100
done

Цей скрипт циклічно переглядає .log-файли, витягує ім’я без розширення і записує кожну дію в журнал. basename спрощує обробку імен файлів без складного розбиття рядка на частини.

📂 2. Використання basename для динамічних шляхів до файлів

Припустимо, ви отримуєте повні шляхи від користувача або іншого процесу:

#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "Ім'я файлу: $filename"

Використання базового імені в скрипті забезпечує гнучкість при роботі з динамічними шляхами до файлів, особливо в таких середовищах, як Linux VPS, де журнали, конфігураційні файли і резервні копії можуть знаходитися в різних директоріях. Це робить ваш скрипт надійним незалежно від того, чи передається повний шлях, наприклад, /var/log/syslog, чи відносний файл, наприклад, ./config.txt.

🧪 3. Поєднання базового імені з іменем каталогу

Використовуйте їх разом, щоб ізолювати елементи шляху:

#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"

Видалення розширень файлів з базовим ім’ям

Якщо ви хочете видалити відомі розширення:

basename report-final.txt .txt

⚠️ Примітка: Це працює, тільки якщо суфікс точно збігається. Отже, .txt працює, але .TXT або .tar.gz не працюватимуть, якщо не вказано явно.

Для декількох розширень комбінуйте базову назву з іншими інструментами:

file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archive

Або:

filename=$(basename "${file%%.*}")

базове ім’я vs Розширення параметрів

Хоча базове ім’я інтуїтивно зрозуміле, воно породжує підпроцес. Для критично важливих до продуктивності скриптів або великих циклів віддавайте перевагу чистим альтернативам Bash:

Нативний еквівалент Bash:

file="/path/to/image.jpg"
filename="${file##*/}"
echo "$filename"
# Output: image.jpg

Видалити розширення за допомогою рідного Bash:

base="${filename%.*}"
echo "$base"
# Output: image

✅ Швидше, ніж викликати зовнішнє ім’я бази.

Приклад: Масове перейменування файлів

Припустимо, ви хочете додати до префікса всіх файлів .jpg сьогоднішню дату:

#!/bin/bash
prefix=$(date +%F)
for img in *.jpg; do
name=$(basename "$img")
mv "$img" "${prefix}_${name}"
done

Тут використовується базове ім’я для збереження оригінальних назв під час додавання користувацького рядка.

Використовувати базове ім’я “$0” для вступів до сценаріїв

echo "Running script: $(basename "$0")"

Ідеально підходить для друку зручного для користувача виводу або журналів без повних шляхів.

Команда basename є фундаментальним інструментом для маніпулювання шляхами в командних скриптах. Проста на перший погляд, вона інтегрована з циклами, умовною логікою та веденням журналів, що робить її безцінним інструментом для автоматизації та системного адміністрування.

Для просунутих Bash-скриптів варто розглянути можливість розширення параметрів, щоб уникнути падіння продуктивності через виклики підпроцесів. Але для ясності і переносимості – особливо в змішаних Unix-середовищах – базові імена залишаються класикою, якій довіряють.