Команда dirname в Linux
Что такое команда dirname?
dirnameЭто простой, но практичный инструмент командной строки в системах Linux/Unix, используемый для извлечения части пути, соответствующей каталогу, из пути к файлу. Он помогает быстро получить родительский каталог пути без ручного разбора строк.
Основная функциональность
- Ввод: строка пути к файлу
- Вывод: часть пути, соответствующая каталогу (т.е. то, что остаётся после удаления последней косой черты и всего, что после неё)
Синтаксис команды
dirname [选项] 文件名...
Описание параметра
- filename: может быть один или несколько путей к файлам (поддерживаются абсолютные и относительные пути)
- **...** : означает, что несколько путей к файлам можно обрабатывать одновременно
Параметры
Хотя в большинстве случаевdirnameопции не требуются, версия GNU поддерживает следующие стандартные опции:
| Опция | Описание |
|---|---|
-z |
Использовать символ NUL (\0) для разделения вывода вместо символов новой строки |
--help |
Показать справочную информацию |
--version |
Показать информацию о версии |
Как это работает
dirnameКоманда обрабатывает пути, выполняя следующие шаги:
- Удалить все завершающие косые черты (/) из пути
- Удалить последнюю косую черту и все символы после неё
- Если результат пуст, вывести "." (текущий каталог)
Блок-схема обработки

Примеры использования
Базовое использование
Пример
/home/user/docs
$ dirname относительный/путь/к/файлу
относительный/путь/к
Обработка нескольких файлов
Пример
/a/b
/x/y
Специальная обработка путей
Пример
/usr
$ dirname file.txt # Только имя файла
.
$ dirname / # Корневой каталог
/
Использование в скриптах
Пример
# Получить каталог скрипта
SCRIPT_DIR=$(dirname "$0")
echo "Каталог скрипта:$SCRIPT_DIR"
# Получить каталог из пути к файлу конфигурации
CONFIG_PATH="/etc/app/config.cfg"
CONFIG_DIR=$(dirname "$CONFIG_PATH")
echo "Каталог конфигурации:$CONFIG_DIR"
Типичные случаи использования
1. Получить каталог скрипта
Пример
# Получить абсолютный путь каталога скрипта
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "Каталог скрипта:$SCRIPT_DIR"
2. Построение относительных путей
Пример
BASE_DIR="/var/log"
FULL_PATH="$BASE_DIR/app/error.log"
# Получить каталог логов
LOG_DIR=$(dirname "$FULL_PATH")
3. Использование с basename
Пример
FULL_PATH="/home/user/docs/report.pdf"
DIR=$(dirname "$FULL_PATH")
FILE=$(basename "$FULL_PATH")
echo "Каталог:$DIR"
echo "Имя файла:$FILE"
Примечания
Символические ссылки:dirnameОн не разрешает символические ссылки; если вам нужно их разрешить, можно объединить сreadlinkиспользовать
Пример
Обработка пробелов: Когда путь содержит пробелы, обязательно используйте кавычки
Пример
Относительные пути: Вывод останется в форме относительного пути
Пример
../parent
Пустой ввод: Если аргументы не указаны, версия GNU выводит ".", но это не стандартное поведение POSIX
Сравнение с аналогичными командами
| Команда | Функция | Пример входных данных | Пример вывода |
|---|---|---|---|
dirname |
Извлечь часть с каталогом | /a/b/c.txt | /a/b |
basename |
Извлечь часть с именем файла | /a/b/c.txt | c.txt |
realpath |
Получить абсолютный путь (разрешить символические ссылки) | ../file | /full/path/to/file |
Практические упражнения
Создайте тестовый файл и получите путь к его каталогу
Пример
dirname /tmp/testfile
Напишите скрипт, который выводит свой собственный каталог
Пример
echo "Этот скрипт находится в:$(dirname "$0")"
Попробуйте обработать пути с пробелами и специальными символами
Пример
touch "/tmp/my dir/special file.txt"
dirname "/tmp/my dir/special file.txt"
Другие расширения
Справочник команд Linux