TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #160 1.19K
basename и dirname: неочевидные сценарии работы с путями

Команды basename и dirname - инструменты для работы с файловыми путями в Bash. Они часто используются в скриптах, но не все знают о неочевидных возможностях. Разбираемся!

1️⃣ Быстрая обработка путей


file_path="/var/log/nginx/access.log"

echo "Файл: $(basename "$file_path")" # access.log
echo "Каталог: $(dirname "$file_path")" # /var/log/nginx


🔹 basename извлекает имя файла
🔹 dirname оставляет только путь к каталогу

2️⃣ Работа с расширениями. Можно удалить расширение файла с помощью basename:


basename "/home/user/script.sh" .sh # Выведет: script


📌 Это полезно, например, при генерации логов:


log_file="$(basename "$0" .sh).log"
echo "Логи пишем в $log_file"


💡 Здесь $0 - имя запущенного скрипта.

3️⃣ Разбор путей без / в конце. Если путь оканчивается на /, dirname может вернуть неожиданный результат:


dirname "/etc/nginx/" # Выведет: /etc
dirname "/etc/nginx" # Выведет: /etc


📌 Чтобы избежать проблем, лучше заранее удалять слеши:


path="/etc/nginx/"
dirname "${path%/}" # /etc/nginx


4️⃣ Разделение относительных и абсолютных путей. Хотим понять, абсолютный ли путь передан в скрипт?


path="./script.sh"

if [[ "$(dirname "$path")" == "." ]]; then
echo "Это относительный путь"
else
echo "Это абсолютный путь"
fi


5️⃣ Комбинируем с find и xargs. Переименовываем все .txt файлы в .bak, сохраняя имена:


find /path/to/files -name "*.txt" | while read file; do
mv "$file" "$(dirname "$file")/$(basename "$file" .txt).bak"
done


📌 Здесь basename убирает .txt, а dirname сохраняет путь.

BashTex 📱 #linux #utils
  • 👍 10
More from @bash_tex
  1. Oct 13, 2026openat2(): как Linux защищает от выхода за пределы каталога Допустим, приложение должно чи…
  2. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  3. Oct 9, 2026BashTex 📱 #мем
  4. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  5. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  6. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →